ファイルに複数の文字列があり、各文字列に対してコマンドを実行して結果をエクスポートする必要があります。例は次のとおりです。
ファイル.txt
string1
string2
string3
私は走っています:
while read in; do sigtool --hex-dump "$in"; done < file.txt > test.txt
これは以下の出力を提供します。
737472696e6731a737472696e6732a737472696e6733
出力を次の行に分割したいと思います。
737472696e6731
737472696e6732
737472696e6733
この目標をどのように達成できますか?
答え1
あなたは改行したいです。これにより改行文字が出力される。
while read in; do sigtool --hex-dump "$in"; echo; done < file.txt > test.txt
追加された命令を参照してくださいecho
。
私が最初にチェックする必要があるのは、マンsigtool
ページから末尾の改行文字を出力するオプションがあることを確認することです。
まあ、私は実際に(パッケージsigtool
から)それをインポートし、テストせずに上記の内容を書きました。clamav
今私はそれをしました。
あなたが書いたコード動作しません。少なくともclamav-0.99.2-3.el6.x86_64はできません。 sigtool
入力を受け入れる標準入力にあります。 コマンドライン引数を受け入れて変換するオプションはありません。
だからあなたが本当に欲しいのは、次に戻ることです。私のお気に入りの非視覚エディタex
:
printf '%s\n' 'g/^/.!tr -d \\n | sigtool --hex-dump' %p | ex file.txt > test.txt
デモ:
$ cat file.txt
string1
string2
string3
$ printf '%s\n' 'g/^/.!tr -d \\n | sigtool --hex-dump' %p | ex file.txt > test.txt
$ cat test.txt
737472696e6731
737472696e6732
737472696e6733
$
説明する:
グローバルに(regexに一致するすべての行/^/
、つまりすべての行に対して).!
シェルパイプを介して各行()をフィルタリングし、バッファ全体tr -d \\n | sigtool --hex-dump
(p
)を%
標準出力に印刷()し、変更をfile.txt
。
別の方法はAwkを使用することです。
awk -v p='sigtool --hex-dump' '
{printf "%s", $0 | p; close(p); printf "\n"}
' file.txt > test.txt
答え2
代替暴力:
cat test.txt | sigtool --hex-dump | sed 's/0a/\n/g' > gzout.hex
ASCIIテキストファイルを扱うたびに、16進改行文字を再変換するだけです。
(ASCII以外の言語を扱うと、0a
入力に改行文字が表示されていないまま16進ダンプが発生する可能性があります。)