Sed
在sed命令中//中为模式匹配状态
1. 单行next命令
$ sed ‘/header/{
>n
>d
>}’ data.txt //删除匹配行下一行
2. 删除空行
$sed ‘/^$/d’ data.txt //删除所有的空行
3. 多行删除
$sed ‘N;/1\n2’ data.txt //仅删除1行,即删除模式空间中的第一行
4. 组合多行
$ sed ‘/header/{
>N
>s/\n/ /
>}’ data.txt //替换匹配行下一行的换行符
5. 多行打印命令
$sed -n ‘
>N
>//P
>’ data //发生多行匹配时,P命令只打印模式空间的第一行
6. 模式空间和保留空间
模式空间是一个活动的缓冲区,保留空间是暂时保留文本行的空间
5个保留空间有关的命令
h 将模式空间复制到保留空间里
H 将模式空间追加到保留空间里
g 将保留空间复制到模式空间里
G 将保留空间追加到模式空间里
x 将模式空间和保留空间的内容交换
7. 否定命令
感叹号命令(!)用于否定命令。在通常命令被激活的地方不激活命令。
$ sed ‘{
>$!N
>s/123/234/
>}’ data.txt //$!N表示在最后一行不执行N命令
创建范转行sed
$sed -n ‘{
>1!G
>h
>$p
}’ data.txt //第一行不执行G命令
8. 更改命令流
分支
[address] b [label]
$sed ‘{
>2,4b
>s/2/--/
>}’ data.txt //跳过2到4行的数据进行替换
$sed ‘{
>/first/b jump1
>s/is/might/
>:jump1
>s/data/text/
>’} data.txt //在第二个替换时,跳过first替换
$sed -n ‘{
>:start
>s/,//2p
>/,/b start
>}’ data.txt //从第二次出现逗号时替换,直到没有逗号可以匹配时为止
测试
[address] t[label]
$sed ‘{
>s/first/starting/
>t
>s/line/test/
>}’ data.txt //如果第一个匹配没有成功则执行第二个,否则不执行
$sed -n ‘{
>:start
>s/,//1p
>t start
}’ data.txt //匹配成功则执行start标签
9. 模式替换
与号
$sed ‘s/.at/”&”/g’ data.txt //&替代前边匹配模式的.at
替换个别单词
$sed ‘s/furry \(.ar\) (is)/\1 \2/’ data.txt //用\1,\2分别替换小括号的内容
10. 对文件中的行计数
$sed ‘=’ data.txt|sed ‘N;s/\n/ /’ data.txt //显示行号
11. 打印十行以后的数据
$sed '{:start;$q;N;11,$D;b start}' /etc/group
12 删除多次出现空行的行仅留一行
sed '/./,/^$/!d' data
13 删除开头为空的行
sed '/./,$!d' data
14. 删除结尾的空行
$sed ‘{:start;/^\n*$/{$d;N;b start}}’ data.txt
15. 删除HTML标记
$sed ‘s/<[^>]*>//g;//^$/d’ data.txt