web-dev-qa-db-ja.com

Linuxで、シェルを介してsedに 'quote`back-ticを取得するにはどうすればよいですか。

Linuxで、charからASCIIのdecimal/hex/octコードを取得する方法、またはdecimal/hex/octコードからasciicharを取得する方法を教えてください。

gnu sedユーザーマニュアル から、\ d#\ o#\ x#を使用して文字を指定できることがわかりますが、その使用方法がわかりません。

誰かが `と 'の文字を取得するためのより良い方法を持っているなら、助けてください

バッククォートの '' `文字と '' '一重引用符でsedしたい。

sed '/ `/ p'

これらは機能しません

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

3
nelaaro

そこでsedで何をしようとしているのか完全にはわかりません。これはあなたが探しているものですか?

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

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

BashFAQ 071 から取得

編集

sedは、正規表現に`または'のいずれかが含まれていれば完全に問題ありません。問題が発生しているのは、一重引用符とバッククォートの両方がシェルにとって特別な意味を持っているため、シェルインタープリターを介してこれらの文字を取得することです。bashが構文エラーをスローしたり入力を操作したりせずにsedにする場合は、引用符で囲む必要があります。

特殊文字を引用する方法は3つあります。一重引用符'、二重引用符"、および円記号\です。それらはすべて少し異なった振る舞いをします。 'はそれ自体を除くすべてを引用するため、これを使用して`を引用できますが、'は引用できません。 "は、\`、および$(ここでは関係ありません)を除くすべてを引用するため、"を使用して'を引用できますが、`は引用できません。 \はすべてを引用しているので、両方に使用できます。引用ルールをまっすぐに保つ限り、これらのメソッドをネストすることができます(左から右に解釈されます)。

より具体的にするために、sed正規表現にs/`'/replacement/が必要だとします。これを行うには多くの方法があります。 2つの異なる例を以下に示します。

# 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/"

引用ルールを念頭に置いて、仕事を成し遂げる最も読みやすいバージョンを使用してください。完全な説明とリファレンスについては、bashマニュアルのQUOTINGセクションを参照してください。

最後に、特別な\d\x\oなどのエスケープの使用は避けたいと思います。

  • それらはGNU sedの拡張であり、適切に引用されたパターンよりも移植性が低い可能性があります。
  • 少し読みにくいです。頭のてっぺんから'`のASCII値を知っている人は何人いますか?
6
jw013

シェルタイプではman asciiこれにより、8進数、16進数、および10進数の文字コードが得られます。

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
5
Nifle

私はこれを別のフォーラムで見つけました:

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

少し長く、Perlを使用していますが、機能します:)。

使用法:

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

これを行う1つの方法は、[]を使用して検索する文字を囲むことです。

これは機能しますが、bashが `チルダチャーをキャッチするのにまだ問題がありました。

sed -n '/ [`]/p'

[']引用符は機能せず、コマンドライン拡張でbashによってキャッチされます。

[。

これはどのように機能しますか。これで、 `= ascii96を '= ascii39に置き換えることができます

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

0
nelaaro