sedでnullバイト(␀、NUL、\ 0)を検出する方法はありますか?


15

別の質問に関連して、バイナリファイルをあいまいに検出するために、inバイトを検出する方法はありますsedか?


GNU sedでは、はい、しかし、多くの大学では、テキストユーティリティはnullバイトを処理できないことに注意してください。
ジル「SO-悪であるのをやめる」

回答:


16

例:

改行が続くNULバイトを送信していることを証明します。

$ echo -e \\0 | hexdump -C
00000000  00 0a                                             |..|
00000002

次に、NULバイトを!感嘆符に変更します。

$ echo -e \\0 | sed 's/\x00/!/' | hexdump -C
00000000  21 0a                                             |!.|

そのため、トリックは\x00NULバイトとして使用しています。


3
echo -ne \\0改行を避けることができます。
-l0b0

置換hexdump -Cuniname -bcepuて、ダンプする文字を確認します。
l0b0

6
これは\x非標準のsed拡張機能であることに言及する必要がありますが、GNUsedはそれを提供しています。
jw013

6
それはまた言及されるべきです、それecho -eバシズムです。printfはるかに互換性があります。
ジョフェル

7

はい、パターンは\x00ヌルバイトに一致します。

例:

$ printf "\0\n\0\n" > file
$ sed -e 's/\x00/test/' -i file
$ cat file
test
test
$  

@ l0b0:それが私のために働いた理由は、私がzshを使用したからです。POSIXによると\0、ゼロバイトに置き換えられます。この置換は必要ありません(「サポートされる」)、実際にはbashは直接サポートしません。それには、を使用する必要がありますecho -e。私は交換するechoとしてprintf...もっと互換性があるように思える私の答えで
jofel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.