2012-03-14 6 views
1

私はこのスクリプトを持っています。動作しません。スクリプトは、キーワード 'キーワード'が2回現れるすべてのファイルのリストを返すようにします。grepファイルのワードカウントが数値の場合、

#!/bin/bash 
for file in * ; do 
    if [ $(grep 'keyword' $file | wc -l) -eq 2 ] 
    then 
     echo $file 
    fi 
done 
+2

これは試してもうまくいくようです。可能であれば、どのように動作していないか、最小限の例を示してください。また、 '$ file'の代わりに' '$ file" 'を使って、ファイル名にスペースを含むスクリプトを守ってください。 –

+1

これは、 'keyword 'が同じ行に2回出現した例も見逃していると思います。 – DSM

+0

@Eduardo私はあなたに答えを与えるだろうが、それはコメントです。とにかくあなたは正しいと思った。私はちょうど出力が始まるのに十分長く待っていなかった。 – nottinhill

答えて

3

使用

grep -c 'keyword' * | sed -n -e '/:2$/s/:2$//p' 
+0

+1。私は最終的なgrep | sedを 'awk -F: '$ 2 == 2 {print $ 1}'のように置き換えようとしています。 –

+1

@glennjackman:これは考えましたが、ファイル名には': 'が含まれています – Sorpigal

+0

@glennjackman:もちろん、私は 'sed'と呼んでからもう一度grepする必要はないので、私はまだ愚かです。回答が編集されました。 – Sorpigal

0

これを試してみてください:

ls -1 | grep .*keyword.*keyword.*

+0

これは、キーワードを1行に少なくとも2回含むファイルの結果を返します。 :) – Bgs

2

あなたはgrepのの '-o' オプションを使用する場合があります、これが出力されます独自のライン内のすべての試合フルラインを印刷する代わりに。同じ行に2回以上出現したときにも機能します。

grep -o 'keyword' $file | wc -l 
関連する問題