如何使用grep在同一行上查找不同的字符串

时间:2014-10-27 15:53:16

标签: ubuntu grep

我试图在文本文件中查找包含第一个字符串的所有行,例如|Kittens|Color|。然后我希望搜索跳过下一组||中的内容,以搜索第二个字符串|Location|

文件中的所有内容都由管道|符号分隔。换句话说,我希望文本文件中的所有行包含小猫,颜色和位置,当它们在文件中时:

12321415|Kittens|Color|Gender|Location|

3 个答案:

答案 0 :(得分:1)

我认为最好是使用awk这样:

awk -F"|" '$2=="Kittens" && $3=="Color" && $5=="Location"' file

这会将管道|设置为字段分隔符,并在此基础上检查特定字段2,3和5的值。如果所有字段都与给定值匹配,则打印该行。

测试

$ cat a
12321415|Kittens|Color|Gender|Location|
12321415|Kittens|Color|Location|Blabla|
asdf|asdf|asdf|ads|asd|

执行awk:

$ awk -F"|" '$2=="Kittens" && $3=="Color" && $5=="Location"' a
12321415|Kittens|Color|Gender|Location|

答案 1 :(得分:0)

要打印出与该信息匹配的整行,请使用以下内容:

awk -F'|' '$2=="Kittens" && $3=="Color" && $5=="Location"'

如果您只想打印第五个字段,请使用:

awk -F'|' '($2=="Kittens" && $3=="Color" && $5=="Location"){print $5}'

或者,因为那不是一个特别有用的命令,你可能意味着Location是一个占位符,打印出与前两个规范相匹配的每一行的第五个字段。

awk -F'|' '($2=="Kittens" && $3=="Color"){print $5}'

答案 2 :(得分:0)

你的问题没有提到固定字段,所以我提供了这个替代方案。

grep -E '\|Kittens\|Color|(.*\|)?Lovation\|' file

正如您所看到的,这个特定的字段分隔符与(正如grep -E)正则表达式中的扩展并不是很快乐。

如果订单在一般情况下完全免费,那么蛮力管道可能是最简单的;

grep -F '|Kittens|' file |
grep -F '|Color|' |
grep -F '|Location|'

将按任意顺序查找包含所有三行的行。