Linuxで、charからASCIIのdecimal/hex/octコードを取得する方法、またはdecimal/hex/octコードからasciicharを取得する方法を教えてください。
gnu sedユーザーマニュアル から、\ d#\ o#\ x#を使用して文字を指定できることがわかりますが、その使用方法がわかりません。
誰かが `と 'の文字を取得するためのより良い方法を持っているなら、助けてください
バッククォートの '' `文字と '' '一重引用符でsedしたい。
sed '/ `/ p'
これらは機能しません
sed '/ \'/p '
sed '/ `/ p'
そこで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
などのエスケープの使用は避けたいと思います。
sed
の拡張であり、適切に引用されたパターンよりも移植性が低い可能性があります。'
と`
のASCII値を知っている人は何人いますか?シェルタイプでは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
私はこれを別のフォーラムで見つけました:
Perl -ne 'if(/'\''(.*)'\''/) {print $1}'
少し長く、Perlを使用していますが、機能します:)。
使用法:
echo "'string with single quotation marks'" | Perl -ne 'if(/'\''(.*)'\''/) {print $1}'
これを行う1つの方法は、[]を使用して検索する文字を囲むことです。
これは機能しますが、bashが `チルダチャーをキャッチするのにまだ問題がありました。
sed -n '/ [`]/p'
[']引用符は機能せず、コマンドライン拡張でbashによってキャッチされます。
[。
これはどのように機能しますか。これで、 `= ascii96を '= ascii39に置き換えることができます
$ printf "%d%d\n" "''" "'` "
39 96
sed -ne's/\ d96/\ d39/gp '