仅打印一次包含字符串的行
Print lines that contain a string only once
例如这是我的文件 Weapons
:
Sword of Dragons
Staff of Fire
Bow of Noxious
Staff of Light
Bow of Noxious
我想输入一个命令,只显示一次包含 Bow
的行。
这是我尝试过的:
grep -n "Bow" Weapons
但它只显示所有包含 Bow
的行。如何只显示一次包含 Bow
的行?
您可以在排序命令中使用内置选项:
sort -u file | grep -i bow
或者如果您坚持使用唯一
sort file | uniq | grep -i bow
您可以使用 Bow
作为 awk
中的字段分隔符,如果这导致一行中有 2 个字段,则只打印:
awk -F"Bow" 'NF==2' file
如果您不想区分大小写,请使用 IGNORECASE=1
。
为了匹配准确的单词(例如Bow
而不是bowtie
),你可以使用GNU awk,感谢Ed Morton的建议,<
>
锚点以指示单词的限制(如其他语言中的 \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
例如这是我的文件 Weapons
:
Sword of Dragons
Staff of Fire
Bow of Noxious
Staff of Light
Bow of Noxious
我想输入一个命令,只显示一次包含 Bow
的行。
这是我尝试过的:
grep -n "Bow" Weapons
但它只显示所有包含 Bow
的行。如何只显示一次包含 Bow
的行?
您可以在排序命令中使用内置选项:
sort -u file | grep -i bow
或者如果您坚持使用唯一
sort file | uniq | grep -i bow
您可以使用 Bow
作为 awk
中的字段分隔符,如果这导致一行中有 2 个字段,则只打印:
awk -F"Bow" 'NF==2' file
如果您不想区分大小写,请使用 IGNORECASE=1
。
为了匹配准确的单词(例如Bow
而不是bowtie
),你可以使用GNU awk,感谢Ed Morton的建议,<
>
锚点以指示单词的限制(如其他语言中的 \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