In linux how do I to get ' quote ` back-tic through the shell into sed.

3

2

In linux how do I to get the ascii decimal/hex/oct code from a char or a ascii char from a decimal/hex/oct code.

I see from the gnu sed user manual that I can use the \d# \o# \x# to specify a character but I am not sure how to use that.

If some one has a better way to get the the ` and ' chars through please help

I want to sed with the backtick '`' character and ''' single quote character.

sed '/`/p'

these don't work

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

nelaaro

Posted 2011-08-03T13:46:56.663

Reputation: 9 321

1FYI ` is a "backtick", not tilde. ~ is a tilde. – jw013 – 2011-08-04T06:38:34.177

@jw013 you can edit the post buy clicking the edit link. Plus you score +2 rep for every edit you make that gets accepted. Thanks for all your help with the two problems I had. Thank you. – nelaaro – 2011-08-04T08:03:03.947

1

For future reference when converting characters... http://www.asciitable.com

– Joe Internet – 2011-08-04T08:03:54.120

Answers

6

Not entirely sure what you are trying to do with sed there. Is this what you are looking for?

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

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

Taken from BashFAQ 071

Edit

sed is perfectly fine with either ` or ' in its regex. Where you are running into problems is getting those characters through the shell interpreter since both single quote and backtick have special meaning to the shell, and must be quoted if they are to make it to sed without bash throwing a syntax error or mangling the input.

There are three ways to quote special characters: single quote ', double quote ", and backslash \. They all behave a bit differently. ' quotes everything except itself, so you can use this to quote ` but not '. " quotes everything except \, `, and $ (irrelevant here), so you can use " to quote ' but not `. \ quotes everything so you could use that for both. It is possible to nest these methods as long as you keep the quoting rules straight (they are interpreted from left to right).

To make things more concrete, suppose you wanted s/`'/replacement/ in your sed regex. There are many ways to do this. Two different examples are given below.

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

Just keep the quoting rules in mind and use the most readable version that gets the job done. See the QUOTING section in the bash manual for a complete explanation and reference.

As a final note, I'd avoid using the special \d, \x, \o etc. escapes because

  • They are GNU extensions to sed which may be less portable than properly quoted patterns.
  • It's a bit harder to read. How many people know the ASCII values for ' and ` off the top of their heads?

jw013

Posted 2011-08-03T13:46:56.663

Reputation: 1 163

thanks this answer helped me to match 3 horrible characters / ` ' – roblogic – 2018-02-27T01:30:41.250

That is the context of the problem. I cant use ` or ' in a sed statement and I cant escape them either. So I was looking for a way around it. – nelaaro – 2011-08-04T06:28:39.770

1@nelaar I've updated my answer to explain the escaping. – jw013 – 2011-08-04T06:58:21.990

thanks, that makes things easier. I was looking through all these different sed tutorials, returned by Google but non had instructions on how to escape ' `. Thanks that will make life a lot easier. – nelaaro – 2011-08-04T07:46:58.127

5

In a shell type man ascii this will give you the character codes in octal, hex and decimal.

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

Nifle

Posted 2011-08-03T13:46:56.663

Reputation: 31 337

2

I found this in another forum:

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

It is a bit long and it uses Perl, but it works :).

Usage:

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

Nul

Posted 2011-08-03T13:46:56.663

Reputation: 21

0

One way to do it is to use [] to enclose the characters you want to search for

this works, although I still had problems with bash catching the ` tilde char.

sed -n '/[`]/p'

['] quote does not work how ever and is caught by bash on the command line expansion.

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

This how ever does work. Now I can replace ` = ascii 96 with ' = ascii 39

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

nelaaro

Posted 2011-08-03T13:46:56.663

Reputation: 9 321