shell 使用grep排除字词

6yoyoihd  于 2022-11-16  发布在  Shell
关注(0)|答案(1)|浏览(180)

例如我的文字是这样的。

mykey
nice comment
...
...
mykey
not bad comment
...
...
mykey
nice comment
...
...
mykey
excellent comment

我正在使用grep,例如

$ grep 'mykey' * -1 | wc -l
$ 4

$ grep 'mykey' * -1 | grep 'nice comment' | wc -l
$ 2

这样可以检查mykey出现的次数以及nice comment是否成功。
然后我想看看nice comment在mykey之后没有出现在哪里。
起初我试着这样做,但它是错误。

grep 'mykey' * -1 | grep -v 'nice comment'

我要表现出如,

mykey
not bad comment

mykey
excellent comment

这可能吗?

0dxa2lsx

0dxa2lsx1#

我认为这不可能用grep实现,但可以使用sed

sed -n '/mykey/{N;/nice comment/!p;}' master.txt

输出量:

mykey
not bad comment
mykey
excellent comment

如果你只想统计“不好”评论的数量,你仍然可以使用两个grep:

$ grep -A1 --group-separator= 'mykey' master.txt | grep -v 'nice comment\|mykey\|^$' | wc -l
2

相关问题