本文记录了作者使用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"
将匹配行中的匹配内容替换为空字符串,就消除了匹配内容,留下了非匹配内容