In Linux, come faccio a ottenere "quotare" back-tic attraverso la shell in sed.


3

In Linux come faccio a ottenere il codice ASCII decimale / hex / oct da un char o un carattere ASCII da un codice decimale / hex / oct.

Vedo dal gnu sed manuale utente che posso usare \ d # \ o # \ x # per specificare un personaggio, ma non sono sicuro di come usarlo.

Se qualcuno ha un modo migliore per ottenere il "e" caratteri attraverso, per favore aiutatemi

Voglio sedare con l'apice '' 'carattere e' '' carattere di citazione singola.

sed '/ `/ p'

questi non funzionano

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


1
FYI `è un" backtick ", non tilde. ~ è una tilde.
jw013

@ jw013 puoi modificare l'acquisto del post cliccando sul link modifica. Inoltre, ottieni un punteggio di +2 per ogni modifica che fai che viene accettata. Grazie per tutto il tuo aiuto con i due problemi che ho avuto. Grazie.
nelaaro

1
Per riferimento futuro durante la conversione di caratteri ... asciitable.com
Joe Internet

Risposte:


6

Non del tutto sicuro di cosa stai provando a fare sed Là. E 'questo quello che stai cercando?

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

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

Preso da BashFAQ 071

modificare

sed sta perfettamente bene con entrambi ` o ' nella sua espressione regolare. Dove si incontrano problemi si ottengono quei caratteri attraverso l'interprete della shell poiché sia ​​la virgoletta singola che l'apice hanno un significato speciale per la shell, e devono essere citati se devono renderli in sed senza bash generando un errore di sintassi o maneggiando l'input.

Esistono tre modi per citare caratteri speciali: virgolette singole ', doppia citazione "e backslash \. Si comportano tutti in modo un po 'diverso. ' cita tutto tranne se stesso, quindi puoi usare questo per citare ` ma no '. " cita tutto tranne \, `, e $ (irrilevante qui), quindi puoi usare " per citare ' ma no `. \ cita tutto per poterlo usare per entrambi. È possibile annidare questi metodi finché si mantengono dritte le regole di quotatura (vengono interpretate da sinistra a destra).

Per rendere le cose più concrete, supponi di volerlo s/`'/replacement/ nel tuo sed regex. Ci sono molti modi per farlo. Di seguito sono riportati due esempi diversi.

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

Tieni a mente le regole di quotazione e usa la versione più leggibile per completare il lavoro. Vedere il QUOTING sezione nel manuale di bash per una spiegazione completa e riferimento.

Come nota finale, eviterei di usare lo speciale \d, \x, \o ecc. fugge perché

  • Sono estensioni GNU a sed che può essere meno portabile di modelli correttamente citati.
  • È un po 'più difficile da leggere. Quante persone conoscono i valori ASCII per ' e ` dalla cima delle loro teste?

Questo è il contesto del problema. Non posso usare "o" in una dichiarazione sed e non posso sfuggire neanche loro. Quindi stavo cercando un modo per aggirarlo.
nelaaro

1
@nelaar Ho aggiornato la mia risposta per spiegare la fuga.
jw013

grazie, questo rende le cose più facili Stavo guardando attraverso tutti questi diversi tutorial di sed, restituiti da Google ma non avevo istruzioni su come scappare ". Grazie, renderà la vita molto più facile.
nelaaro

grazie questa risposta mi ha aiutato ad abbinare 3 personaggi orribili / `'
ropata

5

In un tipo di shell man ascii questo ti darà i codici dei caratteri in ottale, esadecimale e decimale.

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

Super utile, grazie lo ricorderò.
nelaaro

2

Ho trovato questo in un altro forum:

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

È un po 'lungo e usa Perl, ma funziona :).

Uso:

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

0

Un modo per farlo è usare [] per racchiudere i caratteri che si desidera cercare

questo funziona, anche se ho ancora avuto problemi con bash che cattura il `tilde char.

sed -n '/ [`] / p'

['] quote non funziona come mai e viene catturato da bash sull'espansione della riga di comando.

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

Questo come mai funziona. Ora posso sostituire `= ASCII 96 con '= ASCII 39

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.