4

ファイル内の x'00 から x'40' までの一連の 16 進文字をスペースに置き換えたいと考えています。それらのそれぞれに sed -e 's/\x00//g' を書きたくありません..これを行うより効率的な方法はありますか?

4

3 に答える 3

4

環境とsedのバージョンによっては、これでうまくいく場合があります。(タブをいじることは避けますが、スペースを別のスペースに置き換えるだけなので、スペースを避ける理由はありません。)

LANG='' sed 's/[\x00-\x08\x0A-\x40]/ /g'

これにより、sed コマンドの実行中に LANG がクリアされます。たとえば、環境がUTF8の場合、これでいくつかの問題を解決できます。

于 2013-04-12T16:07:16.807 に答える
0

これ:

LC_ALL=C sed 's/[\x00-\x40]/ /g'

またはラフ:

(LC_ALL=C; sed 's/[\x00-\x40]/ /g')

テスト:

alias hxr="perl -ne'for(split){print chr hex}'"

printf '%02X ' `seq 65` | hxr | hd

printf '%02X ' `seq 65` | hxr | LC_ALL=C sed 's/[\x00-\x40]/ /g'; echo
于 2016-05-13T15:56:32.207 に答える
0

trの代わりに使用しsedます。まず、文字コードを 16 進数から 8 進数に変換する必要があります。0 から 77 の 8 進数が必要だとしましょう。これは次のとおりです。

tr '\0-\77' ' ' < your-input-file
于 2013-04-12T14:58:12.923 に答える