Sed是文本处理工具,根据指定条件对数据进行添加,替换,删除等操作。
官方网站https://www.gnu.org/software/sed/manual/sed.html
命令 | 说明 |
---|---|
-a | 追加,在当前行后添加一行或者多行 |
-c | 行替换 用c后面的字符串替换原数据行 |
-i | 插入,在当前行插入一行或者多行 |
-d | 删除 删除指定行 |
-p | 打印 输出指定的行 |
-s | 字符串替换 用一个字符串替换另外一个字符串,格式为”行范围s/旧字符串/新字符串/g”,这个和vim中的替换格式类似。 |
p打印命令
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