作者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/cn.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