0%

grep打印匹配行的未匹配内容

本文记录了作者使用grepsed命令来实现,打印grep匹配行中的未匹配内容的功能的方法,简单来说:

  1. 先使用grep <pattern>提取出匹配行
  2. 再使用sed -e 's/<pattern>//g'将匹配内容消除,即可得到未匹配内容

场景与方案

使用grep时,我们可以用grep <pattern>来打印出匹配行,可以使用grep -o <pattern>来打印出匹配行中的匹配内容,但是如果希望能够实现“反选”,也就是打印出匹配行中的费匹配内容,应该怎么做呢?

单纯的grep命令没有提供这种机制的支持,但是同时使用grepsed命令就可以实现

1
2
> echo "matched not\nmat" | grep "matched" | sed "s/matched//g"
not

首先,我们使用grep <pattern>打印出匹配行,而后,使用sed "s/<pattern>//g"将匹配行中的匹配内容替换为空字符串,就消除了匹配内容,留下了非匹配内容