次のシェル スクリプトの行が正確に何を実行しているのかを判断しようとしています。
grep --files-with-matches '>' . | sort | uniq | xargs perl -pi~ -e 's/9Kp/9K /' /home/user/DATAFILE.DAT
'9Kp' のグローバル検索を実行し、指定されたデータ ファイル内で '9K ' に置き換えようとしていることは確かですが、その前に grep コマンドが何を実行しているのかはよくわかりません。
答え1
grep --files-with-matches '>' .
>
現在のディレクトリ ( ) 内で検索し.
、一致するファイルのファイル名のみを出力します ( --files-with-matches
)。
grep
返還されないことに注意してください何でもディレクトリ( )を指定して.
も「再帰」モードを有効にするのを忘れた場合、正しいコマンドは次のようになります。
grep --files-with-matches --recursive '>' .
あるいは単に
grep -Rl '>' .
| sort
| uniq
結果を並べ替え、重複を削除します。
| xargs perl -pi~ -e 's/9Kp/9K /' /home/user/DATAFILE.DAT
perl ...
stdin からの各単語1を追加引数として渡して、指定されたコマンド ( ) を実行します。
結果からのすべてのファイルgrep
と/home/user/DATAFILE.DAT
ファイルは、テキスト「9Kp
」を「 」に置き換えることによって更新されます9K
。古いファイルは末尾にチルダを付けてバックアップされます。
1注記:言葉、 ないラインこれは、スペースを含むファイル名が複数の名前として扱われることを意味します。xargs -d'\n'
完璧ではありませんが、より良いでしょう。