Sed是文本处理工具,根据指定条件对数据进行添加,替换,删除等操作。
官方网站https://www.gnu.org/software/sed/manual/sed.html

命令 说明
-a 追加,在当前行后添加一行或者多行
-c 行替换 用c后面的字符串替换原数据行
-i 插入,在当前行插入一行或者多行
-d 删除 删除指定行
-p 打印 输出指定的行
-s 字符串替换 用一个字符串替换另外一个字符串,格式为”行范围s/旧字符串/新字符串/g”,这个和vim中的替换格式类似。

p打印命令

  1. sed -n "p" passwd

a新增行

# nl passwd|sed '5a--------'

i插入行

nl passwd|sed '5i--------'

c 替换

nl passwd|sed '5c replace current line'

d 删除

sed '1d' passwd #删除第一行数据
sed '2,4d' passwd #删除2~4行的数据
# nl passwd|sed '/mysql/ d' #删除匹配mysql数据

测试文件test.txt

number 1.
number 2.
number 3.
number 4.

测试shell

#! /bin/bash
sed '3d' test.txt

输出结果

number 1.
number 2.
number 4.

删除指定行

#! /bin/bash
sed '2,3d' test.txt

输出结果

number 1.
number 4.

$a末尾追加

sed '$a \\t int a = 1 \n\t System.out.Println(a)' test.sh

s 替换

测试文本test.txt

This is a test of the test script.
This is the second test of the test script.

指定 sed 用新文本替换第几处模式匹配的地方,使用数字 2 作为标记的结果就是,sed 编辑器只替换每行中第 2 次出现的匹配模式。

#! /bin/bash
sed 's/test/trial/2' test.txt

输出结果

This is a test of the trial script.
This is the second test of the trial script.

如果要用新文件替换所有匹配的字符串,可以使用 g 标记

#! /bin/bash
sed 's/test/trial/g' test.txt

输出结果

This is a trial of the trial script.
This is the second trial of the trial script.

测试文件test.txt

This is a test line.
This is a different line.

执行shell,-n 选项会禁止 sed 输出,但 p 标记会输出修改过的行,将二者匹配使用的效果就是只输出被替换命令修改过的行,

#! /bin/bash
sed -n 's/test/trial/p' test.txt

w 标记会将匹配后的结果保存到指定文件中,

#! /bin/bash
sed -n 's/test/trial/w foo.txt' test.txt

在使用 s 脚本命令时,替换类似文件路径的字符串会比较麻烦,需要将路径中的正斜线进行转义
测试文件。test.txt

root:x:0:0:root:/root:/usr/bin/zsh

执行shell

#! /bin/bash
sed 's/\/bin\/zsh/\/bin\/bash/' test.txt

输出结果

root:x:0:0:root:/root:/usr/bin/bash

参考

https://linux.cn/article-12992-1.html