Shell——Sed(五)

前言

s e d是一种重要的文本过滤工具,或者使用一行命令或者使用管道与
g r e p与a w k相结合。

s e d 读取数据,将之拷贝到一个编辑缓冲区,然后读命令行或脚本的第一条命令,并使用这些命令查找模式或定位行号编辑它。重复此过程直到命令结束。

表达式

调用s e d有三种方式:

  1. 在命令行键入命令

    sed [选项] s e d命令 输入文件。

    记住在命令行使用s e d命令时,实际命令要加单引号。 s e d也允许加双引号。

  2. 将 s e d命令插入脚本文件,然后调用 s e d

    sed [选项] -f sed脚本文件 输入文件

  3. 将s e d命令插入脚本文件,并使s e d脚本可执行

    s e d脚本文件 [选项] 输入文件

s e d选项如下:

  • n 不打印;s e d不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。p命令可以用来打印编辑行。
  • c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条 s e d命令,此选项无用,但指定它也没有关系。
  • f 如果正在调用s e d脚本文件,使用此选项。

s e d浏览输入文件时,缺省从第一行开始,有两种方式定位文本:

  • 使用行号,可以是一个简单数字,或是一个行号范围。
  • 使用正则表达式

使用sed在文件中查询文本的方式

s e d浏览输入文件时,缺省从第一行开始,有两种方式定位文本:

  • 使用行号,可以是一个简单数字,或是一个行号范围。
  • 使用正则表达式

sed 基本编辑命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
p 打印匹配行
= 显示文件行号
a\ 在定位行号后附加新文本信息
i\ 在定位行号后插入新文本信息
d 删除定位行
c\ 用新文本替换定位文本
s 使用替换模式替换相应模式
r 从另一个文件中读文本
w 写文本到一个文件
q 第一个模式匹配完成后推出或立即推出
l 显示与八进制A S C I I代码等价的控制字符
n 从另一个文件中读文本下一行,并附加在下一行
g 将模式2粘贴到/pattern n/
y 传送字符
n 延续到下一输入行;允许跨行的模式匹配语句

p 输出

打印第二行:

sed -n ‘2p’ data.f

可以指定行的范围,现打印 1到3行:

sed -n ‘1,3p’ data.f

匹配单词 N e a v e:

sed -n ‘/Neave/‘p data.f

匹配元字符$,必须使用反斜线\屏蔽其特殊含义:

sed -n ‘/$/‘p data.f

显示整个文件,$代表最后一行:

sed -n ‘1,$p’ data.f

显示行号

要打印行号,使用等号=。打印模式匹配的行号,使用格式 / p a t t e r n / =。

sed -n -e ‘/build/=’ data.f

显示行号和匹配内容,必须使用两个 s e d命令,并使用 e选项。第一个命令打印模式匹配行,第二个使用=选项打印行号,格式为sed -n -e /pattern/p -e /pattern/=。

sed -n -e ‘/build/p’ -e ‘/build/=’ data.f

d 删除

s e d删除文本格式:
[ a d d r e s s [,a d d r e s s ] ] d

1
2
3
4
5
6
7
2d	sed '2d' 1.txt	删除1.txt的第二行
2,5d sed '2,5d' 1.txt 删除1.txt的第二行到第五行
2,+5d sed '2,+5d' 1.txt 删除1.txt的第二行和第二行以后的5行
$d sed '$d' 1.txt 删除1.txt的最后一行行
/正则/ sed '/^[0-9]/d' 1.txt 删除以数字开始的行
sed '/^[0-9]/!d' 1.txt 删除不是以数字开头的行
^$ sed '^$' 1.txt 删除1.txt的空行

s 替换

替换命令用替换模式替换指定模式,格式为:
[ a d d r e s s [,address]] s/ pattern-to-find /replacement-pattern/[g p w n]

s 选项通知s e d这是一个替换操作,并查询 p a t t e r n - t o - f i n d,成功后用r e p l a c e m e n t - p a t t e r n替
换它。

替换选项如下:

  • g 缺省情况下只替换第一次出现模式,使用 g选项替换全局所有出现模式。
  • p 缺省s e d将所有被替换行写入标准输出,加 p选项将使- n选项无效。- n选项不打印输出
    结果。
  • w 文件名 使用此选项将输出定向到一个文件。
1
2
3
4
5
s/old/new/	sed 's/old/new/' 1.txt	删除1.txt中每行的第一个old都替换成new
s/old/new/2 sed 's/old/new/2' 1.txt 删除1.txt中每行的第二个old都替换成new
s/old/new/g sed 's/old/new/g' 1.txt 删除1.txt中每行的每一个old都替换成new
s/old// sed 's/old//' 1.txt 删除1.txt中每行的第一个old都替换成空也就是把old删除
s/old/&s/ sed 's/old/&s/' 1.txt 删除1.txt中每行的第一个old都替换成olds &代表前面查找的字符串

r 读文本

s e d允许从另一个文件中读文本,并将其文本附加在当前文件。此命令放在模式匹配行后,格式为:
address r filename

将 sedex.txt 内容附加到文件 quote.txt 的拷贝。

在模式匹配行 /company/ 后放置附加文本。

sed ‘/company./r sedex.txt’ quote.txt

i/a/c插入

1
2
3
4
i	sed '2i123' 1.txt	在1.txt的第二行前面插入123
i sed '/^[0-9]/i123' 1.txt 在1.txt中所有数字开头的行前面插入123
a 在行后插入 命令格式和i相同
c 替换该行 命令格式和i相同
文章目录
  1. 1. 前言
  2. 2. 表达式
  3. 3. 使用sed在文件中查询文本的方式
  4. 4. sed 基本编辑命令
  5. 5. p 输出
  6. 6. 显示行号
  7. 7. d 删除
  8. 8. s 替换
  9. 9. r 读文本
  10. 10. i/a/c插入
|