dd if=/dev/zero of=file.dd bs=1 count=1
テスト目的で1バイトのNULLファイルを作成しました。次のテストで奇妙な結果が得られました。
dd if=file.dd |
sed 's/\x5e/X/' |
xxd
00000000: 5800 X.
NULLデータストリームから取得する方法はsed
?x5E
ありがとうございます。
答え1
正規^
表現特殊文字は、「行の開始」に対して幅がゼロの一致であり、入力の先頭に暗黙の行があります。したがって、少なくとも1行で構成されていると見なされるすべての入力およびsed
(またはほとんどの正規表現ツール)は、これを次のように処理します。
$ printf "\0\0\0" | od -c
0000000 \0 \0 \0
0000003
$ printf "\0\0\0" | sed 's/^/Y/' | od -c
0000000 Y \0 \0 \0 \n
0000005
$ printf "\0\0\0" | perl -ple 's/^/Y/' | od -c
0000000 Y \0 \0 \0 \n
0000005
GNUsed
は追加の合併症治療は\x5e
次のとおりです^
。
$ printf "\0\0\0" | gsed 's/^/Y/' | od -c
0000000 Y \0 \0 \0
0000004
$ printf "\0\0\0" | gsed 's/\x5e/Y/' | od -c
0000000 Y \0 \0 \0
0000004
^
リテラルを一致させるには、扱わない、または特別に扱わない他の形式を使用する必要があります。^
\x5e
$ printf "\0\x5e\0" | gsed 's/[=\x5e]/Y/' | od -c
0000000 \0 Y \0
0000003
$ printf "\0\x5e\0" | perl -pe 's/\x5e/Y/' | od -c
0000000 \0 Y \0
0000003