sed 字符修改命令

发布时间: 更新时间: 总字数:733 阅读时间:2m 作者: IP上海 分享 网址

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
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数