sed速查手册
一、替换
pets.txt
$cat pets.txt
This is my cat
my cat's name is betty
This is my dog
my dog's name is frank
This is my fish
my fish's name is george
This is my goat
my goat's name is adam
html.txt
$cat html.txt
<b>This</b> is what <span style="text-decoration: underline;">I</span> meant. Understand?
my.txt
$cat my.txt
This is my cat, my cat's name is betty
This is my dog, my dog's name is frank
This is my fish, my fish's name is george
This is my goat, my goat's name is adam
1.1 普通替换
my字符替换成Hao Chen's
sed "s/my/Hao Chen's/g" pets.txt
行首追加#
sed 's/^/#/g' pets.txt
行尾追加—
sed 's/$/---/g' pets.txt
去掉html中的tags
sed 's/<[^>]*>//g' html.txt
只替换第3到第6行的文本
sed '3,6s/my/your/g' pets.txt
只替换每一行的第一个s
sed 's/s/S/' my.txt
只替换每一行的第二个s
sed 's/s/S/2' my.txt
只替换第一行的第3个以后的s
sed '1s/s/S/3g' my.txt
1.2 多个匹配
1到3行my替换成your,3到6行This替换成That
sed '1,3s/my/your/g; 3,$s/This/That/g' my.txt
sed -e '1,3s/my/your/g' -e '3,$s/This/That/g' my.txt
1.3 变量
my这个单词两边加上[],即[my]
sed 's/my/[&]/g' my.txt
1.4 括号
提取cat:betty
sed 's#This is my ([^,]*),.*is (.*)#1:2#g' my.txt
二、命令
2.1 N命令
把下一行的内容纳入当成缓冲区做匹配。
两行两行的匹配
# 把原文本中的偶数行纳入奇数行匹配,而s只匹配并替换一次
sed 'N;s/my/your/' pets.txt
sed 'N;s/
/,/' pets.txt
2.2 a命令和i命令
Mac没有a命令和i命令???
在第一行前插入
sed '1i abc' my.txt
在第一行后追加
sed '1a def' my.txt
用匹配来添加文本,在含有fish这一行后追加
sed '/fish/a ghi' my.txt
2.3 c命令
替换匹配行
把第2行匹配成xyz
sed '2c xyz' my.txt
2.4 d命令
删除匹配行
删除第二行
sed '2d' my.txt
2.5 p命令
sed默认输出所有行(无论是否匹配)
-n选项则取消上述默认输出
p命令只输出匹配的行
2.6 i命令
将修改更新到文件
三、高级
3.1 address
Mac上的sed不支持???
对含有dog的行接下来的3行加#
sed '/dog/,+3s/^/#/' pets.txt
3.2 命令打包
删除3到6行中包含This和fish的行
sed '3,6{/This/{/fish/d}}' pets.txt
删除包含This的行,去除每行开头的空格
sed '{/This/d; s/^ *//}' pets.txt
3.3 Hold Space & Pattern Space
g hold_space替换pattern_spacer
G hold_space追加pattern_space
h pattern_space替换to hold_space
H pattern_space追加to hold_space
x 交换pattern_spac和hold_space的内容
t.txt
$cat t.txt
one
two
three
demo1
sed 'H;g' t.txt
反序一个文件的行
sed '1!G;h;$!d' t.txt
3.4 命令执行流程
概括流程:Sed软件从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行……
模式空间:sed软件内部的一个临时缓存,用于存放读取到的内容。