使用 grep 打印列出的字符串之一,但如果存在多个字符串,则打印所有这些字符串
Using grep to print one of the listed strings but print all of them if more than one exists
我在一个文件中搜索了三个字符串。要找到其中任何一个的行,我使用
grep 'string1\|string2\|string3' file
我想使用 -o
标志仅打印出每一行中匹配的字符串。但在这种情况下,如果行中存在两个字符串,则只会显示其中一个。有没有一种方法可以得到类似 string1
and/or string2
等的东西,而不必列出 6 个使用和或使用 this answer.
的案例
请注意,我使用的是 OS X Yosemite。
预期输出:
string1
string1 string2
string3
string1 string3
string3
等等
你最后多了一个尾随\|
,试试
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}'
你可以尝试打印行号,重复的记录
不会有行号。然后只需加入带有 post 处理的行。
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 sed.
上不起作用
输出将类似于此
string1
string2 string3
string3
string1 string2 string3
我在一个文件中搜索了三个字符串。要找到其中任何一个的行,我使用
grep 'string1\|string2\|string3' file
我想使用 -o
标志仅打印出每一行中匹配的字符串。但在这种情况下,如果行中存在两个字符串,则只会显示其中一个。有没有一种方法可以得到类似 string1
and/or string2
等的东西,而不必列出 6 个使用和或使用 this answer.
请注意,我使用的是 OS X Yosemite。
预期输出:
string1
string1 string2
string3
string1 string3
string3
等等
你最后多了一个尾随\|
,试试
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}'
你可以尝试打印行号,重复的记录 不会有行号。然后只需加入带有 post 处理的行。
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 sed.
输出将类似于此
string1
string2 string3
string3
string1 string2 string3