用途
对字符串进行处理
语法
sed [OPTION]… {script-only-if-no-other-script} [input-file]…
sed [-nefri] {‘command’} 输入文本
描述
常用选项
-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i∶直接修改读取的档案内容,而不是由萤幕输出。
常用命令:
= : 打印文件的行数
a\text : 新增, a\的后面可以接字串text,而这些字串会在指定行的下一行出现(默认是当前行)
i\text : 插入, i\ 的后面可以接字串text,而这些字串会在指定行的上一行出现
d : 删除,删除指定行
c\text : 取代, c\ 的后面可以接字串text,text会取代指定所有行的内容
p : 打印,亦即将某个选择的资料印出,通常 p 会与参数 sed -n 一起运作
s/regexp/replacement/ : 取代,通常这个s的动作可以搭配正规表示法,将regexp替换为replacement,另外sed常在结尾加g,表示全局,例如 1,20s/old/new/g,可看举例来加深印象
地址匹配
看不懂解释多看看下面的例子
n:匹配第n行
$:匹配最后一行
n,m:匹配第n到第m行
n,+M:匹配第n行到接下来的M行
n,~M:匹配第n行到接下来的若干行(行数从头算起)是M的倍数
n~m:匹配每n行中的第m行
举例
常用命令举例
apuser@bjzktmp05u:~/Mygithub/shellscripts$ cat asdasa
asjaldsjablcjacs
gogogogogogogo
987654321
gogogogogogogo
123456789
gogogogogogogo
1
2
3
4
5
6
7
8
9
10
11
12
apuser@bjzktmp05u:~/Mygithub/shellscripts$ sed -n '=' asdasa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apuser@bjzktmp05u:~/Mygithub/shellscripts$ sed -i '18a\sunshine' asdasa
apuser@bjzktmp05u:~/Mygithub/shellscripts$ cat asdasa
asjaldsjablcjacs
gogogogogogogo
987654321
gogogogogogogo
123456789
gogogogogogogo
1
2
3
4
5
6
7
8
9
10
11
12
sunshine
apuser@bjzktmp05u:~/Mygithub/shellscripts$ sed -i '1i\goodbay' asdasa
apuser@bjzktmp05u:~/Mygithub/shellscripts$ cat asdasa
goodbay
asjaldsjablcjacs
gogogogogogogo
987654321
gogogogogogogo
123456789
gogogogogogogo
1
2
3
4
5
6
7
8
9
10
11
12
sunshine
apuser@bjzktmp05u:~/Mygithub/shellscripts$ sed -i '1,3d' asdasa
apuser@bjzktmp05u:~/Mygithub/shellscripts$ cat asdasa
987654321
gogogogogogogo
123456789
gogogogogogogo
1
2
3
4
5
6
7
8
9
10
11
12
sunshine
apuser@bjzktmp05u:~/Mygithub/shellscripts$ sed -i '1,3c\monkey' asdasa
apuser@bjzktmp05u:~/Mygithub/shellscripts$ cat asdasa
monkey
gogogogogogogo
1
2
3
4
5
6
7
8
9
10
11
12
sunshine
apuser@bjzktmp05u:~/Mygithub/shellscripts$ sed -i 's/go/ha/' asdasa
apuser@bjzktmp05u:~/Mygithub/shellscripts$ cat asdasa
monkey
hagogogogogogo
1
2
3
4
5
6
7
8
9
10
11
12
sunshine
apuser@bjzktmp05u:~/Mygithub/shellscripts$ sed -i 's/go/ha/' asdasa
apuser@bjzktmp05u:~/Mygithub/shellscripts$ cat asdasa
monkey
hahagogogogogo
1
2
3
4
5
6
7
8
9
10
11
12
sunshine
apuser@bjzktmp05u:~/Mygithub/shellscripts$ sed -i 's/go/ha/g' asdasa
apuser@bjzktmp05u:~/Mygithub/shellscripts$ cat asdasa
monkey
hahahahahahaha
1
2
3
4
5
6
7
8
9
10
11
12
sunshine
sed ‘1d’ ab #删除第一行
sed ‘2,$d’ ab #删除第二行到最后一行
sed ‘1,3a drink tea’ ab #第一行到第三行后增加字符串”drink tea”
地址表达匹配举例
apuser@bjzktmp05u:~/Mygithub/shellscripts$ cat asdasa
asjaldsjablcjacs
gogogogogogogo
987654321
gogogogogogogo
123456789
gogogogogogogo
1
2
3
4
5
6
7
8
9
10
11
12
apuser@bjzktmp05u:~/Mygithub/shellscripts$ sed -n 2~4p asdasa
gogogogogogogo
gogogogogogogo
4
8
12
apuser@bjzktmp05u:~/Mygithub/shellscripts$ sed -n 3~4p asdasa
987654321
1
5
9
apuser@bjzktmp05u:~/Mygithub/shellscripts$ sed -n '7,$p' asdasa
1
2
3
4
5
6
7
8
9
10
11
12
apuser@bjzktmp05u:~/Mygithub/shellscripts$ sed -n '7,+4p' asdasa
1
2
3
4
5
apuser@bjzktmp05u:~/Mygithub/shellscripts$ sed -n '7,11p' asdasa
1
2
3
4
5
apuser@bjzktmp05u:~/Mygithub/shellscripts$ sed -n '1,~1p' asdasa
asjaldsjablcjacs
gogogogogogogo
apuser@bjzktmp05u:~/Mygithub/shellscripts$ sed -n '1,~5p' asdasa
asjaldsjablcjacs
gogogogogogogo
987654321
gogogogogogogo
123456789
apuser@bjzktmp05u:~/Mygithub/shellscripts$ sed -n '2,~5p' asdasa
gogogogogogogo
987654321
gogogogogogogo
123456789
apuser@bjzktmp05u:~/Mygithub/shellscripts$ sed -n '2,~1p' asdasa
gogogogogogogo
987654321