grep“ something” anyfiles.log> afile.csv、入力パスとファイル名をCSVファイルに出力する必要はありません


9

私はいくつかのログファイルを持っています、それらは30000行以上あります。「ドメイン」という名前を見つけてCSVファイルに保存する必要がありますが、保存後、CSVファイルの行の先頭に入力ファイルのパスとファイル名が追加されています。パスと入力ファイル名がCSVファイルに追加する必要がない場合はどうすればよいですか。

例:

Input
#cat /home/log/any.log

any things..domain, anything
any things..domain, anything
any things..domain, anything


grep "domain" /home/logs/any.log > newfile.csv

Output:
#cat newfile.csv
/home/logs/any.log:domain
/home/logs/any.log:domain
/home/logs/any.log:domain


#----My requirement output is:

cat newfile.csv
domain
domain
domain

よろしくお願いします。誰か知っていたら助けてください

回答:


21

--no-filenamegrep のオプションを使用します。

出力時にファイル名の接頭辞を抑制します。これは、検索するファイルが1つ(または標準入力のみ)の場合のデフォルトです。

grep --no-filename "domain" 

リファレンス:Grepマニュアル


1

詳細はman cutを参照してください。ただし、簡単な答えはgrep "domain" /home/logs/*.log | cut -d: -f2 >newfile.csvです。

または見るman grepと行うgrep -o "domain" /home/logs/*.log >newfile.csv

PS:grep "domain" /home/logs/any.log例のように、コマンドラインにファイルが1つしかない場合、grepはファイル名を出力しません。ファイル名を強制的に出力したい場合grep "domain" /home/logs/any.log /dev/nullは、トリックを実行します。


man cut...痛いですね。
Matt Fletcher
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.