作者eric680826 (神奇峰)
看板Linux
標題[問題] 有辦法找出內容符合多條件的檔案嗎?
時間Tue Mar 28 18:35:51 2017
在LINUX中,用egrep "123|abc"可以找出檔案內有“123”或“abc"的檔案,
但若我想要找出一個目錄下,檔案內容同時有“123”和“abc"(不一定會在同一行)的
話,
有沒有什麼好的處理方式呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.136.248.55
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Linux/M.1490697354.A.F1F.html
1F:推 hijkxyzuw: grep -q 'abc' $filename && grep -q '123' $filename03/28 18:52
這個我怎麼試都不行。
2F:→ kenduest: grep -Rl --null "123" /path/ 2>/dev/null | \03/28 19:21
3F:→ kenduest: xargs -0 grep -l "root"03/28 19:22
4F:推 rickieyang: egrep -oH '123|ab' *|sed -e 's/:.*//'|sort|uniq -d03/29 08:54
5F:→ rickieyang: 更正...03/29 08:55
6F:→ rickieyang: egrep -oH '123|abc' *|sort|uniq|sed -e 's/:.*//'|\03/29 08:56
7F:→ rickieyang: uniq -d03/29 08:56
若條件式只有1個或超過2個時,這樣的寫法一樣會找不出來。
※ 編輯: eric680826 (223.137.143.215), 03/29/2017 12:20:15
8F:推 rickieyang: 只有一個就直接 grep 呀,超過兩個不能用 uniq -d 03/29 13:33
9F:推 hijkxyzuw: 是 if grep 'abc' $filename && grep '123' $filename 03/29 13:54
10F:→ hijkxyzuw: then echo $filename 03/29 13:54
11F:→ hijkxyzuw: fi 03/29 13:54
12F:推 nknudragon: egrep "123\|abc" 03/29 15:37
13F:推 nknudragon: pcregrep -M '123.*(\n|.)*abc' file.log 03/29 15:45
14F:推 nknudragon: grep -e "123.*(\n|.)*abc" file.log <-- 這沒試過 03/29 16:01
15F:推 nknudragon: pcregrep -M '123.*\n.*abc' file.log 03/29 16:25
16F:推 nknudragon: grep -Pzo "(?s)^(\s*)\N*main.*?{.*?^\1}" *.c 03/29 16:28
18F:推 nknudragon: 上面的方法好像都只能找到 先出現123 , 再出現abc 03/29 18:45
20F:→ Bellkna: grep -P '^(abc.*123|123.*abc)' 03/29 19:54
21F:→ Bellkna: 這個應該可以去regexp板問看看 03/29 19:55
22F:推 Vdragon: devide & conquer 如何?先找出有 A 式樣的檔案再從中找 03/30 13:10
23F:→ Vdragon: 有 B 式樣的檔案 03/30 13:10
24F:→ Vdragon: *divide 03/30 13:10
25F:推 losepacific: grep -Pzl '(?s)(?=.23)(?=.1)(?=.*ab)' * 03/31 05:23
26F:→ losepacific: 更正 grep -Pzl '(?s)(?=.*23)(?=.*1)(?=.*ab)' * 03/31 05:24
27F:→ losepacific: 但以目前的例子應該寫成: 03/31 05:26
28F:→ losepacific: grep -Pzl '(?s)(?=.*abc)(?=.*123)' * 03/31 05:27