我在文件中搜索了三个字符串。要找到其中任何一行的行,我使用
grep 'string1\|string2\|string3' file
我想使用-o
标记仅打印每行中匹配的字符串。但是在这种情况下,如果该行中存在两个字符串,则只显示其中一个字符串。有没有办法获得string1
和/或string2
之类的内容,而无需使用和this answer列出6个案例。
请注意,我使用的是OS X Yosemite。
预期产出:
string1
string1 string2
string3
string1 string3
string3
等
答案 0 :(得分:1)
最后你有一个额外的尾随\|
,试试
grep -o 'string1\|string2\|string3' file
string1
string1
string2
string3
string1
string3
string3
编辑:您可以将此grep
与gnu-awk一起使用:
grep -no 'string1\|string2\|string3' file | awk -v RS='[0-9]+:' 'NR>1{
gsub(/\n/, "\t"); print}'
答案 1 :(得分:1)
您可以尝试打印行号,重复记录 没有行号。然后加入后处理行。
grep -Eon 'string1|string2|string3' txt
1:string1
2:string2
string3
3:string3
4:string1
string2
在上述情况下,2:string2
和string3
可以加入string2 string3
在Mac OS上完成命令
grep -Eon 'string1|string2|string3' txt | tr '\n' ' '
| sed -E 's/ [0-9]:/:/g' | tr ':' '\n'
最后tr
& sed
命令可以用单sed
命令替换。但不知何故,新行字符无法在Mac上运行。
输出类似于此
string1
string2 string3
string3
string1 string2 string3