0%

sed命令

sed命令

sed是流编辑器,主要用于将数据进行选取、替换、删除、新增的命令,以批处理的方式而不是交互的方式来编辑文件,会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。

sed编辑器执行的操作:

  • sed读取文件是一次读取一行
  • 根据所提供的编辑器命令匹配数据
  • 按照命令修改流中的数据
  • 将新的数据输出(不会修改原始的文件)

语法格式为sed [选项] '[address][动作]' 文件名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#删除第二行
sed '2d' stu.txt
# 删除第一个冒号之后的所有东西
sed 's/:.*//' user.txt

# 多次替换
sed -e 's/foo/bar/g' -e 's/chicken/cow/g' test.txt > newtest.txt
# 多个命令也可以用分号隔开,而不使用多次-e
sed -e 's/foo/bar/g;s/chicken/cow/g' test.txt > newtest.txt


-----------------------
选项
-n 把经过sed命令处理的数据输出到屏幕,只输出p指令的行
-e 允许对输入数据应用多条sed命令,当有多个命令需要执行时,可以使用该选项
-f 脚本文件名 从sed脚本中读入sed操作,当有多个命令需要执行时,可以使用该选项
-r 在sed中支持正则
-i 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出

动作
a \ 追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾都需要用\来表示数据未完结,append
c \ 行替换,用c后的字符串替换原数据行,替换多行时,除最后一行外,每行末尾都需要用\来表示数据未完结,change
i \ 插入,在当前行前插入一行或多行,插入多行时,除最后一行外,每行末尾都需要用\来表示数据未完结,insert
d 删除指定行,delete
p 打印,输出指定行
s 字符替换,用一个字符串替换另一个字符串。格式为'行范围s/旧字符串/新字符串/g' ,substuite
w 向文件写入行 sed '1,2w test.log' test.txt 会将前两行保存在test.log文件中

line address

默认动作会作用所有行,如果只想对指定行执行,需要用到行寻址(line address)

sed有两种行寻址形式

  • 使用数字形式表示行区间

    1
    2
    3
    4
    5
    6
    # 删除第二行
    sed '2d' stu.txt
    # 删除第二行和第三行
    sed '2,3d' stu.txt
    # 删除第二行至最后行,$表示最后行
    sed '2,$d' stu.txt
  • 用文本模式来过滤行,就是使用正则表达式

字符替换

1
2
# 去除双引号
sed -i 's/"//g' tmp_query.txt

欢迎关注我的其它发布渠道