sed 使用

sed 是一个Linux 常用文本处理指令,主要用在文本“行处理”

  • 使用说明
1
sed + 选项 +'命令'(脚本文件) + 处理文件或内容
  • 选项

不带选项,则显示处理后的结果

1
2
3
4
5
6
7
8
9
10
11
12
-e 指定脚本命令处理

-f 指定脚本文件处理

-h 帮助信息

-n 显示处理信息

-v 显示版本信息

-i 直接编辑文件

基本语法

sed中脚本命令能够对行内容,执行增删改查等操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 动作命令
a :新增;当前行的下一行增加指定内容

c :修改;把某些行替换成指定行内容

d :删除;删除某些行

i :插入;在当前行的上一行插入指定内容

p :打印;输出匹配行的内容

s :取代; 后面可接通配符 一般使用方法 ‘s/要被取代的字串/新的字串/g’


# 特殊符号
/ :搜索;匹配字符,亦代表新字符串

\ :代表新的一行,特殊通配符号转义

, :代表连续,两边接数字,左边必须比右边小,否则","与后面数字不生效

$ :单独使用代表最后一行,在动作命令中代表以xxx结尾的行

使用范例

以下是单纯的sed使用命令,sed可以搭配通配符或者其他linux命令处理复杂文本处理,需自行摸索。

初始测试文本 test.txt

1
2
3
1
2
3

以下命令执行后的结果,均为下依次命令的处理文本

  • 第2 行后增加“new”字符串

    sed -i '2a \new' test.txt

test.txt:

1
2
3
4
1
2
new
3
  • 修改2,3行内容为hello world

    sed -i '2,3c \hello world' test.txt

test.txt:

1
2
3
1
hello world
3
  • 删除2,3行

    sed -i '2,3d' test.txt

test.txt:

1
1
  • 第1行插入“123456”
    sed -i '1i\123456' test.txt

test.txt:

1
2
123456
1
  • 查找含“23”的行

    sed -n '/23/p' test.txt

使用-n 输出匹配的行,文本内容不会改变

  • 取代“23”为”xxx”

    sed -i 's/23/xxx/g' test.txt

test.txt:

1
2
1xxx456
1
  • 把“456”结尾替换成“…”

    sed -i 's/456/\.../g' test.txt

因为“.”是特殊通配符,这里使用了“\”转义符号
test.txt:

1
2
1xxx...
1

注意事项

sed 是一个很强大的文本处理命令,可以搭配awk或者其他文本命令使用,能够解决大部分的文本处理场景。

如果不熟练,使用 -i 选项时,需要谨慎。