bash - bash如何查找包含字元串N 次或者更頻繁的文件的文件

  显示原文与译文双语对照的内容
140 0

我有一個包含 400 -500 sql文件的文件夾,並且需要
僅包含字元串 CREATE TABLE 3次或者更多的人。

命令時
$ egrep -rl"(CREATE TABLE)"./*.sql
列印我當然所有的文件名,命令
$ egrep -rl"(CREATE TABLE.*){3}"./*.sql
根本不列印任何東西。

標誌:
R,--recursive
-l,--files-with-matches | 只列印包含匹配項的文件的名稱

时间: 原作者:

53 5

你的commamd


egrep -rl"(CREATE TABLE.*){3}"./*.sql



在一行中查找 3 CREATE TABLE 。 在不同的行上,你需要做不同的事情,當你有 GNU grep時,你就很幸運了: 它有 -z 選項。


# minimal change of your command


egrep -zrl"(CREATE TABLE.*){3}"./*.sql


# moving option E to the options as suggested by @anubhava


grep -zErl"(CREATE TABLE.*){3}"./*.sql



107 0

這裡 awk 將執行以下任務:


awk '/CREATE TABLE/{++n} n>2{print FILENAME; n=0; nextfile}' *.sql



原作者:
55 4

請你試一下好。 我正在處理後台打開的文件的數量。


awk '/CREATE TABLE/{++n} n>2{print FILENAME;n="";nextfile}' *.sql



原作者:
109 2

試試這個Perl解決方案


perl -le ' BEGIN { for(glob("*.sql")) { $x=qx(cat $_); $r++ for($x=~m/CREATE TABLE/g); print $_ if $r> 2 ; $r=0 } } '



122 4

假設每行有多個字元串,( 只有的答案是 of ),這裡是awk版本( 一個支持 nextfile )


awk '(FNR==1){n=0}


 {n+=split($0,a,/CREATE TABLE/)-1}


 (n>2) {print FILENAME; nextfile}' */.sql



...