12

次のコマンドからの NUL 区切りの出力があります。

some commands | grep -i -c -w -Z 'some regex'

出力は、次の形式のレコードで構成されます。

[file name]\0[pattern count]\0

sed/awk などのテキスト操作ツールを使用して、レコードを次の形式に変更したいと考えています。

[file name]:[pattern count]\0

しかし、sed/awk は通常、「改行」文字で区切られたレコードのみを処理するようです。私の目的を達成するために sed/awk をどのように使用できるか、または sed/awk がそのようなケースを処理できない場合は、他の Linux ツールを使用する必要があるかどうかを知りたいです。

提案をありがとう。

ローレンス

4

4 に答える 4

8

バージョン 4.2.2 以降、GNUsedにはまさにこれを行う-zor--null-dataオプションがあります。例えば:

sed -z 's/old/new' null_separated_infile
于 2014-03-22T11:55:05.337 に答える
6

デフォルトでは、レコード区切り文字は改行文字であり、レコードを 1 行のテキストとして定義します。組み込み変数 RS を変更することで、別の文字を使用できます。RS の値は、レコードを分割する方法を示す文字列です。デフォルト値は\n、改行文字だけを含む文字列です。

 awk 'BEGIN { RS = "/" } ; { print $0 }' BBS-list
于 2012-02-07T02:23:14.930 に答える
1

sed文字を削除するために使用するnull-

sed 's/\x0/ /g' infile > outfile

または、を実行してファイル内置換を行います(これにより、元のファイルのバックアップが作成され、元のファイルが置換で上書きされます)。

sed -i.bak 's/\x0/ /g' infile

使用tr

tr -d "\000" < infile > outfile
于 2012-02-07T02:50:56.050 に答える