如何使用sed删除文件中的特定整行(含换行符)?
解决sed只清空内容留空行的问题
嘿,我懂你遇到的问题了——你之前用的 sed -i 's/foo//' /tmp/test 只是把行内的foo字符串替换成空内容,自然会留下空行。要彻底删除包含目标内容的整行(连换行符一起删掉),得用sed的删除命令d,而不是替换命令s///。
核心命令
直接用匹配模式加上d参数就能搞定:
sed -i '/foo/d' /tmp/test
/foo/:表示匹配所有包含foo字符串的行d:告诉sed直接删除匹配到的整行,不会留下空行
进阶:精确匹配整行
如果你只想删除**完全等于foo**的行(而不是包含foo的行),可以加上行首行尾锚点:
sed -i '/^foo$/d' /tmp/test
^:匹配行的开头$:匹配行的结尾- 这样只有内容恰好是
foo的整行会被删除,避免误删像hello foo这类包含foo的其他行
举个直观例子
假设/tmp/test原内容是:
hello foo foo bar test
- 执行
sed -i '/foo/d'后,文件内容变成:bar test - 执行
sed -i '/^foo$/d'后,文件内容变成:hello foo bar test
内容的提问来源于stack exchange,提问作者jack sexton
相关产品推荐
相关产品推荐

