如何使用sed工具将字符替换为其他字符?
嘿,我来给你拆解一下用sed做字符替换的各种场景,这工具处理文本替换简直得心应手!
基础替换语法
sed的核心替换命令格式是这样的:
sed 's/要替换的字符/目标字符/' 文件名
这里的s是substitute(替换)的缩写,中间的/是分隔符(你也可以用其他符号比如#,只要前后一致就行)。
举个简单例子:
如果你的当前输出是:
I love cat, cat is cute
期望输出是:
I love dog, cat is cute
那执行这个命令就搞定:
sed 's/cat/dog/' test.txt
不过要注意,默认只会替换每行的第一个匹配项,上面的例子里第二个cat就没被换掉。
全局替换(替换所有匹配项)
如果要把一行里所有符合的字符都换掉,只要在命令末尾加个g(global,全局)就行:
sed 's/cat/dog/g' test.txt
这样再运行上面的例子,输出就会变成:
I love dog, dog is cute
处理特殊字符
如果要替换的是/、&、*这类有特殊含义的字符,记得要加转义符\:
比如把所有的/换成#,命令就是:
sed 's/\//#/g' test.txt
另外,&在sed里代表“匹配到的内容”,比如你想给所有数字加上括号:
当前输出:
123 apple 456 banana
期望输出:
(123) apple (456) banana
用这个命令:
sed 's/[0-9]\+/(&)/g' test.txt
这里[0-9]\+匹配连续的数字,(&)就是把匹配到的数字包在括号里。
直接修改原文件
默认sed只是把修改后的内容输出到屏幕,如果想要直接修改原文件,加上-i参数:
sed -i 's/old/new/g' test.txt
注意:如果是macOS系统的sed,需要加个空参数,写成:
sed -i '' 's/old/new/g' test.txt
实战小例子
假设你的当前输出是:
red;green;blue
期望输出是:
red,green,blue
那直接运行:
sed 's/;/,/g' test.txt
就完美实现啦!
内容的提问来源于stack exchange,提问作者rk123
相关产品推荐
相关产品推荐

