sed是Linux的流编辑器(stream editor),用来将数据进行选取、替换、删除、新增等修改动作。
介绍
sed命令有两种形式:
sed [-Ealnru] command [-I extension] [-i extension] [file ...]
sed [-Ealnru] [-e command] [-f command_file] [-I extension] [-i extension] [file ...]参数说明:
-n把经过处理的行输出到屏幕-e对输入数据应用多条sed命令编辑-f添加脚本文件的内容到执行的动作-i直接修改读取数据的文件,不加该参数时默认输出到屏幕command即 sed 的动作- 一般通过单引号
'引用,业可以通过双引号"引用 a\追加:在当前行后添加一行或多行- 添加多行时,除最后一行外,每行末尾需要用
\代表续行
- 添加多行时,除最后一行外,每行末尾需要用
c\行替换:用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需要用\代表续行i\插入:当前行前插入一行或多行。插入多行时,除最后一行外,每行末尾需要用\代表续行d删除指定的行p打印指定的行s字串替换,用一个字符串替换另外一个字符串,支持的格式:行范围s/旧字串/新字串/g,行范围可选,为空表示全局替换(和vim中的替换格式类似)行范围s#旧字串#新字串#g
- 一般通过单引号
示例
# 输出第二行,p 一般都要和 -n 使用,不加 -n 会显示出所有的行
sed -n '2p' abc.txt
# 管道符结果作为操作内容
df -h | sed -n '2p'
# 删除文件的第 2 行到第 4 行,没有加 -i 选项,仅输出到屏幕,不更改文件内容
sed '2,4d' abc.txt
# 在第二行后追加 hello,没有加 -i 选项,仅输出到屏幕,不更改文件内容
sed '2a hello' abc.txt
# 在第二行前插入两行数据,没有加 -i 选项,仅输出到屏幕,不更改文件内容
sed '2i hello \
world' abc.txt
# 把第二行替换为No person
sed '2c No person' abc.txt
# 把第二行的O替换为N后输出
sed '2s/O/N/g' abc.txt
# 替换的结果写入文件
sed -i '2s/O/N/g' abc.txt
# -e 允许多条命令顺序执行,用分号隔开,s前面不加数字表示所有行
sed -e 's/xie//g ; s/xianbin//g' abc.txt
# 与 find 一起使用
find . -type f -name "*.yaml" | xargs -i sed -i "s#abc#def#g" {}F&Q
sed 单引号替换不生效
$ export world=xianbin
$ echo "hello world" | sed 's/world/${world}/g'
hello ${world}使用双引号 " 正常替换
$ export world=xianbin
$ echo "hello world" | sed "s/world/${world}/g"
hello xianbin