ls *.CCD
ディレクトリ出力の使用などの情報を含むログファイルがあります
/var/tmp/Person
。
-rwxr-xr-x 1 bv90 dkas 153698 Nov 18 13:08 WE994002.CCD
私にはそんなセリフが多いです。
これにより、grep .CCD /var/tmp/k.log | grep bv90 | grep "Nov 18"
行全体が回復しますが、WE994002.CCD
ファイル名のみを印刷するようにコマンドを変更するにはどうすればよいですか?
答え1
最後の列を印刷します。
awk '{print $NF}' /var/tmp/k.log
または
grep .CCD /var/tmp/k.log | grep bv90 | grep "Nov 18" | awk '{print $NF}'
答え2
awk ステートメントを追加して、次のようにリストを解析します。
grep .CCD /var/tmp/k.log | grep bv90 | grep "Nov 18"| awk '{print $9}'
このawkステートメントは出力をスペースで区切って9番目のフィールドを印刷します。
この場合、grepを完全にスキップして次のように短縮できます。
awk '/.CCD$/ && /bv90/ && /Nov 18/ {print $9}' /var/tmp/k.log
答え3
GNU grepを使用している場合は、この-o
オプションが関連している可能性があります。
$ echo '-rwxr-xr-x 1 bv90 dkas 153698 Nov 18 13:08 WE994002.CCD' | grep -o '[^ ]*\.CCD$'
WE994002.CCD
これは、フィルタリングするファイル名にスペースが含まれていないと仮定します。呼び出しでは、grep -o
行末で終わる空白ではなく、文字シーケンスに一致する行部分のみを印刷する必要があります。.CCD
完全なコマンドは次のとおりです。
</var/tmp/k.log grep bv90 | grep "Nov 18" | grep -o '[^ ]*\.CCD$'
答え4
ファイル名にスペースがなく、ソフトリンクがない場合は、Cyrusの説明に従ってAWKを使用します。
ファイル名にスペースが含まれている場合は、スペースを使用して前のすべてのフィールドを記述し、次のすべてのタグをキャプチャできます。
sed 's/\(\S\+\s\+\)\{8\}\(.*\)/\2/' logfile
最初の角かっこセットは列を記述し、その後にスペースが続きます。これを8回繰り返します。 2番目の角かっこセットは、逆参照\ 2によってキャプチャされた残りの行をキャプチャします。
ソフトリンクを削除する必要がある場合は、Casが言ったように別のsedコマンドが必要であると確信しています。
sed 's/\(\S\+\s\+\)\{8\}\(.*\)/\2/ ; s/ -> .*//'