Linux下能否用单条sed命令实现行内子串修改并保留全文件?
单条sed命令实现目标的方案
当然可以,你之前的命令问题出在-n和p的组合上:-n会让sed默认不输出任何行,只有遇到p命令才打印,所以最终只保留了被修改的行。
正确的单条命令非常简单:
sed -i '/foo/s/bar/bah/' test.txt
命令解释
-i:直接修改源文件(如果担心误操作,可写成-i.bak,会生成一个名为test.txt.bak的备份文件)/foo/:仅对包含foo的行执行后续操作s/bar/bah/:在匹配到的行内,把第一个bar替换成bah(如果要替换行内所有匹配的bar,加个g改成s/bar/bah/g)
执行后你的test.txt内容会变成:
foo bah goo bar
如果想先预览修改效果而不改动原文件,去掉-i直接运行:
sed '/foo/s/bar/bah/' test.txt
内容的提问来源于stack exchange,提问作者Langerz
相关产品推荐
相关产品推荐

