2012-03-14 55 views
1

我有這個腳本 - 它不工作。我希望腳本返回關鍵字'keyword'出現兩次的所有文件的列表。如果grep文件wordcount等於數字然後

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

它試過了,它似乎工作正常。請告訴我們它不工作的方式,如果可能的話展示一個最簡單的例子。此外,使用'「$ file」'而不是'$ file'來防止腳本受到帶空格的文件名的影響。 – 2012-03-14 16:21:21

+1

我想這也會漏掉'keyword'在同一行出現兩次的情況。 – DSM 2012-03-14 16:23:41

+0

@Eduardo我會給你答案,但它是一個評論。無論如何,你是對的..我只是沒有等待足夠長的時間才能開始輸出。 – nottinhill 2012-03-14 16:45:58

回答

3

使用

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

+1。我會用'awk -F:'$ 2 == 2 {print $ 1}'替換最後的grep | sed' – 2012-03-14 16:33:58

+1

@glennjackman:我想到了這個,但文件名可能包含':' – Sorpigal 2012-03-14 16:34:54

+0

@glennjackman:但是當然,我仍然很傻,因爲無論如何,在我調用'sed'之後不需要'grep'。回答編輯。 – Sorpigal 2012-03-14 16:36:19

0

試試這個:

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

+0

這會對至少有一次關鍵字的文件產生兩次結果。 :) – Bgs 2013-09-19 15:10:38

2

你可能想使用grep的 '-o' 選項,將輸出在其自己的行每場比賽而不是打印整行。當你在同一行上出現2+時,它也可以工作。

grep -o 'keyword' $file | wc -l