2012-11-15 18 views
20

1つのファイルでgrepを実行し、コマンドごとにコマンドを実行する方法は?コマンドをgrepして実行する方法(一致するたびに)

ファイル:

foo 
bar 
42 
foo 
bar 

私はfoo上のすべての試合のために例dateのために実行するために実行したいです。

試みがうまくいかない、次のとおりです。

grep file foo | date %s.%N 

はどのようにそれを行うには?

答えて

24
スクリプトのその他の読み取り可能
grep file foo | while read line ; do echo "$line" | date %s.%N ; done 

:入力の各ラインについて

grep file foo | while read line 
do 
    echo "$line" | date %s.%N 
done 

read変数$lineに値を入れます、そしてwhileステートメントがdodone間ループ本体を実行します。値は現在stdinではなく変数になっているので、echoをstdinにプッシュバックしていますが、ちょうどdate %s.%N "$line"を実行すると、そのように動作します。

find . -iname "*blah*.dat" | while read filename; do .... 

forで失敗します:forは常にスペースに分割し、これはファイルのリストを読み込むための悪夢になるので、似ているfor line in `grep file foo`を使用して

は避けてください。

+0

問題ありません。 grepがファイル(-f)から複数のパターンを読み取る機能や、xargsのstdinからコマンドを構築する機能など、大部分のバルクタスク用のUnixツールがあります。 –

+0

このすべきではない。 grepのFOOファイル ------- NAMEのgrep、egrepの、fgrepは、rgrep - パターンを 形式のgrep [オプション] PATTERN [FILEに一致印刷ライン.. 。] – Xofo

+0

スクリプトを実行するにはどうすればいいですか? grep file foo | while read line do エコー "$ line" |日付%s。%N done ファイルを入れる必要がありますか? –

7

xargsコマンドが必要です。 http://en.wikipedia.org/wiki/Xargs

grep file foo | xargs date %s.%N 

Cygwin環境で完全なWindowsのパスにいくつかのファイルと変換マッチのマッチングの例

$ find $(pwd) -type f -exec ls -1 {} \; | grep '\(_en\|_es\|_zh\)\.\(path\)$' | xargs cygpath -w 
0
grep command_string file | sh - 
+0

こんにちは@ジェームズ、ようこそので、答えを向上させるいくつかの説明を追加することをお勧めし、それはupvoted得る可能性が高くなります。 –

関連する問題