本文记录了作者使用grep和sed命令来实现,打印grep匹配行中的未匹配内容的功能的方法,简单来说:
- 先使用
grep <pattern>提取出匹配行 - 再使用
sed -e 's/<pattern>//g'将匹配内容消除,即可得到未匹配内容
场景与方案
使用grep时,我们可以用grep <pattern>来打印出匹配行,可以使用grep -o <pattern>来打印出匹配行中的匹配内容,但是如果希望能够实现“反选”,也就是打印出匹配行中的费匹配内容,应该怎么做呢?
单纯的grep命令没有提供这种机制的支持,但是同时使用grep和sed命令就可以实现
1 | > echo "matched not\nmat" | grep "matched" | sed "s/matched//g" |
首先,我们使用grep <pattern>打印出匹配行,而后,使用sed "s/<pattern>//g"将匹配行中的匹配内容替换为空字符串,就消除了匹配内容,留下了非匹配内容