本文首發於我的Github博客
本文記錄了作者使用grep
和sed
命令來實現,打印grep
匹配行中的未匹配內容的功能的方法,簡單來說:
- 先使用
grep <pattern>
提取出匹配行 - 再使用
sed -e 's/<pattern>//g'
將匹配內容消除,即可得到未匹配內容
場景與方案
使用grep
時,我們可以用grep <pattern>
來打印出匹配行,可以使用grep -o <pattern>
來打印出匹配行中的匹配內容,但是如果希望能夠實現“反選”,也就是打印出匹配行中的費匹配內容,應該怎麼做呢?
單純的grep
命令沒有提供這種機制的支持,但是同時使用grep
和sed
命令就可以實現
> echo "matched not\nmat" | grep "matched" | sed "s/matched//g"
not
首先,我們使用grep <pattern>
打印出匹配行,而後,使用sed "s/<pattern>//g"
將匹配行中的匹配內容替換爲空字符串,就消除了匹配內容,留下了非匹配內容