我试图在文本文件中查找包含第一个字符串的所有行,例如|Kittens|Color|
。然后我希望搜索跳过下一组||
中的内容,以搜索第二个字符串|Location|
。
文件中的所有内容都由管道|
符号分隔。换句话说,我希望文本文件中的所有行包含小猫,颜色和位置,当它们在文件中时:
12321415|Kittens|Color|Gender|Location|
答案 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|'
将按任意顺序查找包含所有三行的行。