sed在处理文本时是逐行读取文件内容,读到匹配的行就根据指令做操作,不匹配就跳过。
sed -i "s/zxr/zhuxuerong/g" /home/zhuxuerong/test.txt
把/home/zhuxuerong目录下test.txt里的zxr都替换为zhuxuerong
格式:sed -i 's/原字符串/替换字符串/g' filename
//替换文件中的所有匹配项
-i
表示inplace edit,就地修改文件
s
(search)表示查找并替换
g
(global)表示全局,全部
s
只针对文本中每行第一次出现的目标字符串有效,配合标志g
可实现全部替换
命令中三根斜线分隔符是替换的样式,特殊字符需要使用反斜线”\”进行转义。有时候替换目录字符串中有较多斜线,此时可换为其它的分割符(如:?
、#
)只需要紧跟s定义即可。
sed -i 's#原字符串#替换字符串#g' filename
用#
号在用环境变量替换且环境变量中有/
时非常有用.比如
sed -i 's#aaa#'"$JAVA_HOME"'#g' a.txt
sed -i 's/^/添加字符串&/g' filename #在所有行首添加(&符号可有可无)
sed -i 's/$/&添加字符串/g' filename #在所有行末添加
sed -i '2s/原字符串/替换字符串/g' filename #替换第2行符合的
sed -i '$s/原字符串/替换字符串/g' filename #替换最后一行符合的
sed -i '2,5s/原字符串/替换字符串/g' filename #替换2到5行符合的
sed -i '2,$s/原字符串/替换字符串/g' filename #替换2到最后一行符合的
sed -i 's/^/添加的头部&/g;s/$/&添加的尾部/g' # 同时执行两个替换规则,在首尾都加上指定字符
^
表示行首 $
表示行尾
多个替换可以在同一条命令中执行,用分号;
分隔,其格式为:
sed -i 's/原字符串1/替换字符串1/g;s/原字符串2/替换字符串2/g' filename
sed 's/原字符串/替换字符串/g' filename
不要参数i
会把处理过的输出是直接输出到屏幕上而不改变原文件,加上参数i
是就地修改文件(改变了原文件而不输出到屏幕)。没有参数i
的情况下可以将输出重定向。
sed 's/原字符串/替换字符串/g' filename > newfile
更改后的内容留存在newfile
sed -i 's/原字符串/替换字符串/g' filename > newfile
有i
重定向时,newfile
是空的