例如,这是我的名为 Weapons
的文件:
Sword of Dragons
Staff of Fire
Bow of Noxious
Staff of Light
Bow of Noxious
我想输入一个命令,它只显示一次包含 Bow
的行。
这是我尝试过的:
grep -n "Bow" Weapons
但它只显示所有包含 Bow
的行。如何只显示一次包含 Bow
的行?
最佳答案
您可以使用 Bow
作为 awk
中的字段分隔符如果这导致一行中有 2 个字段,则打印:
awk -F"Bow" 'NF==2' file
并使用 IGNORECASE=1
如果您不希望它不区分大小写。
要匹配确切的单词(例如 Bow
但不是 bowtie
),您可以使用 GNU awk,感谢 Ed Morton 的建议,<
>
anchor 以指示单词的限制(如其他语言中的 \b
):
awk -F'\\<Bow\\>' 'BEGIN {IGNORECASE=1} NF==2' a
测试
$ cat a
Sword of Dragons
Staff of Fire
Bow of Noxious
Staff of Light
Bow I like Bow
this is a bow
and this a bowtie
$ awk -F"Bow" 'NF==2' a
Bow of Noxious
$ awk -F"Bow" 'BEGIN {IGNORECASE=1} NF==2' a
Bow of Noxious
this is a bow
and this a bowtie
$ awk -F'\\<Bow\\>' 'BEGIN {IGNORECASE=1} NF==2' a
Bow of Noxious
this is a bow
关于linux - 仅打印一次包含字符串的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28768022/