字符串的grep如果在模式之后存在

时间:2018-08-03 16:05:43

标签: linux grep

此命令将找到其中包含字符串'PARTICULAR ='的任何文件

 grep -r --include=\*.log 'PARTICULAR*=' *

这是我得到的结果:

foo/bar.log:PARTICULAR=gfgfgfgkl5dfgfgf
foo/bar.log:PARTICULAR=
foo/bar.log:PARTICULAR=56945674454rgfgfg
foo/bar.log:PARTICULAR=
foo/bar.log:PARTICULAR=kjdghfidfgh4545454

注意在PARTICULAR =之后的空格

如何编辑命令以仅在PARTICULAR =之后紧接文本后才输出?

我尝试过

grep -r --include=\*.log 'PARTICULAR*=' * | sed 's/^.*: //'

但是我得到了相同的结果(但是命令运行得更快了吗?)

4 个答案:

答案 0 :(得分:1)

可以请您尝试以下操作:

grep -r --include=\*.log 'PARTICULAR*=' * | awk -F'=' 'match($0,\/foo\/bar.log:PARTICULAR=[a-zA-Z]+/)'

OR

grep -Er --include=\*.log '\/foo\/bar.log:PARTICULAR*=[a-zA-Z]+' *

答案 1 :(得分:1)

您可以使用.来表示任何字符:

$ grep '^PARTICULAR=.' bar.log
PARTICULAR=gfgfgfgkl5dfgfgf
PARTICULAR=56945674454rgfgfg
PARTICULAR=kjdghfidfgh4545454

^确保匹配从行的开头开始(即不是ANDINPARTICULAR=foo),缺少*是为了避免匹配PARTICULA=foo和{{1 }},您的PARTICULARRRRRRR=foo将允许。

答案 2 :(得分:1)

经过修改的正则表达式应为您提供所需的结果。

grep -rE --include=\*.log 'PARTICULAR*=.+' *

.匹配任何字符,而+表示=之后至少有一个字符。

注意:由于+运算符是扩展正则表达式的一部分,因此需要添加-E标志。

答案 3 :(得分:1)

 grep -rE --include=\*.log -o "PARTICULAR*=\w+"

基于您包含的输出,您现在应该获得:

$> grep -rE --include=\*.log -o "PARTICULAR*=\w+"
foo/bar.log:PARTICULAR=gfgfgfgkl5dfgfgf
foo/bar.log:PARTICULAR=56945674454rgfgfg
foo/bar.log:PARTICULAR=gkjdghfidfgh4545454