sed速查手册

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/\n/,/' 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软件内部的一个临时缓存,用于存放读取到的内容。

四、参考

posted @ 2018-02-14 16:39  okokabcd  阅读(248)  评论(0编辑  收藏  举报