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 | $ echo "This <b> is </b> an <i>example</i>." | sed -e 's/<[^>]*>//g' |
删除文件中的所有空行(与“grep ‘.’ ”效果相同)
1 | $ sed '/^$/d' |
在每一行后面增加一空行
1 | $ sed G |
计算行数 (模拟 “wc -l”)
1 | sed -n '$=' |
显示文件中的前10行 (模拟“head”的行为)
1 | $ sed 10q |
只显示匹配正则表达式的行(模拟“grep”)
1 | $ sed -n '/regexp/p' |
删除文件尾部的所有空行
1 | $ sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' |
Unix环境:转换DOS的新行符(CR/LF)为Unix格式。
1 | $ sed 's/.$//' # 假设所有行以CR/LF结束 |
Unix环境:转换Unix的新行符(LF)为DOS格式。
1 | $ sed "s/$/`echo -e \\\r`/" # 在ksh下所使用的命令 |
DOS环境:转换Unix新行符(LF)为DOS格式。
1 | $ sed "s/$//" |
DOS环境:转换DOS新行符(CR/LF)为Unix格式。
1 | $ sed "s/\r//" infile >outfile # UnxUtils sed v4.0.7 或更高版本 |
在每一行开头加上一个尖括号和空格(引用信息)
1 | $ sed 's/^/> /' |
将每一行开头处的尖括号和空格删除(解除引用)
1 | $ sed 's/^> //' |