Sed - 4:经典用例

Sed - 1: 基本概念
Sed - 2: 常用功能
Sed - 3: 高级功能

Sed常用命令列表如下:

  命令   功能
a| 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
c| 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用”"续行
i| 在当前行之前插入文本。多行时除最后一行外,每行末尾需用”"续行
d 删除行
h 把模式空间里的内容复制到暂存缓冲区
H 把模式空间里的内容追加到暂存缓冲区
g 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
G 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面
l 列出非打印字符
p 打印行
n 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
q 结束或退出sed
r 从文件中读取输入行
! 对所选行以外的所有行应用命令
s 用一个字符串替换另一个
g 在行内进行全局替换
w 将所选的行写入文件
x 交换暂存缓冲区与模式空间的内容
y 将字符替换为另一字符(不能对正则表达式使用y命令)

经典用例

去除文本中的html tag

1
2
$ echo "This <b> is </b> an <i>example</i>." | sed -e 's/<[^>]*>//g' 
This is an example.

删除文件中的所有空行(与“grep ‘.’ ”效果相同)

1
2
$ sed '/^$/d'
$ sed '/./!d'

在每一行后面增加一空行

1
$ sed G

计算行数 (模拟 “wc -l”)

1
sed -n '$='

显示文件中的前10行 (模拟“head”的行为)

1
$ sed 10q

只显示匹配正则表达式的行(模拟“grep”)

1
2
$ sed -n '/regexp/p'               
$ sed '/regexp/!d'

删除文件尾部的所有空行

1
$ sed -e :a -e '/^\n*$/{$d;N;ba' -e '}'

Unix环境:转换DOS的新行符(CR/LF)为Unix格式。

1
2
3
$ sed 's/.$//'                     # 假设所有行以CR/LF结束
$ sed 's/^M$//' # 在bash/tcsh中,将按Ctrl-M改为按Ctrl-V
$ sed 's/\x0D$//' # ssed、gsed 3.02.80,及更高版本

Unix环境:转换Unix的新行符(LF)为DOS格式。

1
2
3
4
$ sed "s/$/`echo -e \\\r`/"        # 在ksh下所使用的命令
$ sed 's/$'"/`echo \\\r`/" # 在bash下所使用的命令
$ sed "s/$/`echo \\\r`/" # 在zsh下所使用的命令
$ sed 's/$/\r/' # gsed 3.02.80 及更高版本

DOS环境:转换Unix新行符(LF)为DOS格式。

1
2
$ sed "s/$//"                      
$ sed -n p

DOS环境:转换DOS新行符(CR/LF)为Unix格式。

1
2
$ sed "s/\r//" infile >outfile     # UnxUtils sed v4.0.7 或更高版本
$ tr -d \r <infile >outfile # GNU tr 1.22 或更高版本

在每一行开头加上一个尖括号和空格(引用信息)

1
$ sed 's/^/> /'

将每一行开头处的尖括号和空格删除(解除引用)

1
$ sed 's/^> //'