Як в Linux отримати «цитувати» зворотний-тик через оболонку в sed.


3

Як в Linux отримати я код коду ascii / hex / oct з char або ascii char з десяткового / hex / oct коду.

З посібника користувача gnu sed я бачу, що я можу використовувати \ d # \ o # \ x #, щоб вказати символ, але я не знаю, як це використовувати.

Якщо у когось є кращий спосіб отримати символи `і ', будь ласка, допоможіть

Мені хочеться познайомитись із символом однозначної цитати "" "та" ".

sed '/ `/ p'

вони не працюють

sed '/ \' / p '
sed' / `/ p '


1
FYI `- це" backtick ", а не tilde. ~є тильдою.
jw013

@ jw013 ви можете редагувати публікацію, купуючи, натискаючи посилання редагування. Крім того, ви набираєте +2 повторення за кожну зміну, яку ви прийняли. Дякую за всю вашу допомогу у вирішенні двох проблем. Дякую.
nelaaro

1
Для подальшої довідки при перетворенні символів ... asciitable.com
Joe Internet

Відповіді:


6

Не зовсім впевнений, що ви намагаєтеся sedтам зробити . Це те, що ви шукаєте?

printf "\x27 \x60\n"
# prints
# ' `

printf "%x %x\n" "''" "'\`"
# prints
# 27 60

Взято з BashFAQ 071

Редагувати

sedідеально підходить з будь-яким `або 'в його регексе. Там, де у вас виникають проблеми, ви отримуєте цих символів через інтерпретатора оболонки, оскільки однозначна цитата та backtick мають особливе значення для оболонки, і їх слід цитувати, якщо вони змушують це зробити sed без башти, кидаючи синтаксичну помилку або маніпулюючи введенням.

Існує три способи цитування спеціальних символів: одинична цитата ', подвійна цитата "та зворотна косою рисою \. Всі вони поводяться трохи інакше. 'цитує все, крім себе, тож ви можете використовувати це для цитування, `але ні '. "цитує все, окрім \, `і $(не має значення тут), тому ви можете використовувати "для цитування, 'але не `. \цитує все, щоб ви могли використовувати це для обох. Можна вкладати ці методи до тих пір, поки ви дотримуєтесь правил цитування прямо (вони інтерпретуються зліва направо).

Щоб зробити конкретніші речі, припустимо, що ви хотіли s/`'/replacement/в своєму sedрегексе. Існує багато способів зробити це. Нижче наведено два різних приклади.

# concatenation of single-quoted s/`, backslash-quoted ', and 
# single-quoted remainder of the command
sed -e 's/`'\''/replacement/'

# one double-quoted string quotes the single-quote, but an 
# additional backslash is needed to quote the backtick 
sed -e "s/\`'/replacement/"

Просто пам’ятайте про правила цитування та використовуйте найбільш читану версію, яка виконує роботу. QUOTINGПовне пояснення та посилання див. У розділі посібника з bash.

На закінчення я б не використати спеціальний \d, \x, і \oт.д. , тому що вислизає

  • Вони є розширеннями GNU, до sedяких можуть бути менш портативні, ніж правильно цитовані зразки.
  • Це трохи важче читати. Скільки людей знають значення ASCII для верхньої частини голови 'та `поза нею?

Це контекст проблеми. Я не можу використовувати `або 'у заяві sed, і я не можу їх уникнути. Тож я шукав шлях для цього.
nelaaro

1
@nelaar Я оновив свою відповідь, щоб пояснити втечу.
jw013

спасибі, що полегшує справи. Я переглядав усі ці різні підручники з седу, повернуті Google, але не мав інструкцій, як вирватися ''. Завдяки цьому значно полегшиться життя.
nelaaro

дякую, що ця відповідь допомогла мені зіставити 3 жахливих персонажа / ``
roblogic

5

У типі оболонки man asciiце дасть вам коди символів у восьмеричному, шістнадцятковому та десятковому кодах.

ASCII(7)             BSD Miscellaneous Information Manual             ASCII(7)

NAME
     ascii -- octal, hexadecimal and decimal ASCII character sets

DESCRIPTION
     The octal set:

     000 nul  001 soh  002 stx  003 etx  004 eot  005 enq  006 ack  007 bel
     010 bs   011 ht   012 nl   013 vt   014 np   015 cr   016 so   017 si
     020 dle  021 dc1  022 dc2  023 dc3  024 dc4  025 nak  026 syn  027 etb
     030 can  031 em   032 sub  033 esc  034 fs   035 gs   036 rs   037 us
     040 sp   041  !   042  "   043  #   044  $   045  %   046  &   047  '
     050  (   051  )   052  *   053  +   054  ,   055  -   056  .   057  /
     060  0   061  1   062  2   063  3   064  4   065  5   066  6   067  7
     070  8   071  9   072  :   073  ;   074  <   075  =   076  >   077  ?
     100  @   101  A   102  B   103  C   104  D   105  E   106  F   107  G
     110  H   111  I   112  J   113  K   114  L   115  M   116  N   117  O
     120  P   121  Q   122  R   123  S   124  T   125  U   126  V   127  W
     130  X   131  Y   132  Z   133  [   134  \   135  ]   136  ^   137  _
     140  `   141  a   142  b   143  c   144  d   145  e   146  f   147  g
     150  h   151  i   152  j   153  k   154  l   155  m   156  n   157  o
     160  p   161  q   162  r   163  s   164  t   165  u   166  v   167  w
     170  x   171  y   172  z   173  {   174  |   175  }   176  ~   177 del

     The hexadecimal set:

     00 nul   01 soh   02 stx   03 etx   04 eot   05 enq   06 ack   07 bel
     08 bs    09 ht    0a nl    0b vt    0c np    0d cr    0e so    0f si
     10 dle   11 dc1   12 dc2   13 dc3   14 dc4   15 nak   16 syn   17 etb
     18 can   19 em    1a sub   1b esc   1c fs    1d gs    1e rs    1f us
     20 sp    21  !    22  "    23  #    24  $    25  %    26  &    27  '
     28  (    29  )    2a  *    2b  +    2c  ,    2d  -    2e  .    2f  /
     30  0    31  1    32  2    33  3    34  4    35  5    36  6    37  7
     38  8    39  9    3a  :    3b  ;    3c  <    3d  =    3e  >    3f  ?
     40  @    41  A    42  B    43  C    44  D    45  E    46  F    47  G
     48  H    49  I    4a  J    4b  K    4c  L    4d  M    4e  N    4f  O
     50  P    51  Q    52  R    53  S    54  T    55  U    56  V    57  W
     58  X    59  Y    5a  Z    5b  [    5c  \    5d  ]    5e  ^    5f  _
     60  `    61  a    62  b    63  c    64  d    65  e    66  f    67  g
     68  h    69  i    6a  j    6b  k    6c  l    6d  m    6e  n    6f  o
     70  p    71  q    72  r    73  s    74  t    75  u    76  v    77  w
     78  x    79  y    7a  z    7b  {    7c  |    7d  }    7e  ~    7f del

     The decimal set:

       0 nul    1 soh    2 stx    3 etx    4 eot    5 enq    6 ack    7 bel
       8 bs     9 ht    10 nl    11 vt    12 np    13 cr    14 so    15 si
      16 dle   17 dc1   18 dc2   19 dc3   20 dc4   21 nak   22 syn   23 etb
      24 can   25 em    26 sub   27 esc   28 fs    29 gs    30 rs    31 us
      32 sp    33  !    34  "    35  #    36  $    37  %    38  &    39  '
      40  (    41  )    42  *    43  +    44  ,    45  -    46  .    47  /
      48  0    49  1    50  2    51  3    52  4    53  5    54  6    55  7
      56  8    57  9    58  :    59  ;    60  <    61  =    62  >    63  ?
      64  @    65  A    66  B    67  C    68  D    69  E    70  F    71  G
      72  H    73  I    74  J    75  K    76  L    77  M    78  N    79  O
      80  P    81  Q    82  R    83  S    84  T    85  U    86  V    87  W
      88  X    89  Y    90  Z    91  [    92  \    93  ]    94  ^    95  _
      96  `    97  a    98  b    99  c   100  d   101  e   102  f   103  g
     104  h   105  i   106  j   107  k   108  l   109  m   110  n   111  o
     112  p   113  q   114  r   115  s   116  t   117  u   118  v   119  w
     120  x   121  y   122  z   123  {   124  |   125  }   126  ~   127 del

FILES
     /usr/share/misc/ascii

HISTORY
     An ascii manual page appeared in Version 7 AT&T UNIX.

BSD                              June 5, 1993                              BSD

2

Я знайшов це на іншому форумі:

perl -ne 'if(/'\''(.*)'\''/) {print $1}'

Він трохи довгий, і він використовує Perl, але він працює :).

Використання:

echo "'string with single quotation marks'" | perl -ne 'if(/'\''(.*)'\''/) {print $1}'

0

Один із способів зробити це - використовувати [], щоб укласти символів, які потрібно шукати

це спрацьовує, хоча у мене все ще виникали проблеми з басом, що вловлював "тильдовий шар".

sed -n '/ [`] / p'

['] цитата не працює як ніколи і її сприймає bash на розширенні командного рядка.

$ sed -n '/ ['] / p './final/kh_elec_main.db.fin.dump  
> ^ С

Це як ніколи працює. Тепер я можу замінити `= ascii 96 на '= ascii 39

$ printf "% d% d \ n" "" "" "" "
39 96
sed -ne 's / \ d96 / \ d39 / gp'

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.