sed命令的用法

sed命令的详细学习:

Sed的常用选项:

-n:只显示sed匹配到的行。其余行不显示。

-i :可以直接操作原文件。默认情况下sed不会改变原文件,但是-i选项可以修改原文件,此选项应慎用。

-r:可以使用标准正则表达式。默认情况下sed只支持基本正则表达式,但是加上-r选项后则支持扩展正则表达式

-e:多脚本共用。可以同时执行多个命令。

 

 

常见的用法(格式):

替换操作:s命令

sed -e 's/原来的内容/要替换的内容/g' 文件名 

sed -i 's/原来的内容/要替换的内容/g'  文件名 

追加操作:a命令(追加的指定内容的后面)
在第一行的后面追加一行
sed -i 1axiaochao x.txt

在每行的头添加字符,比如"HEAD",命令如下:

sed 's/^/HEAD&/g' test.file

在每行的行尾添加字符,比如“TAIL”,命令如下:

sed 's/$/&TAIL/g' test.file

1."^"代表行首,"$"代表行尾

2.'s/$/&TAIL/g'
s代表替换字符串,(c代表替换整行)
g代表每行出现的字符全部替换(如果想在特定字符处添加,g就有用了,否则只会替换每行第一个,而不继续往后找了)
加上g跟不加g的区别:
 
加上-i跟不加-i的区别:
 

sed -n 's/root/ROOT/p' sed.txt                          sed替换结合-n选项和p命令,只显示改动过的行


sed -i '$a要插入的文字' file.txt                   在文件的结尾插入一行文字

sed -i '1 ised command start' myfile                  行首添加一行
sed -i '$a sed command end' myfile                   行尾追加一行
sed -e '14s/yes/no/g'  /etc/xinetd.d/tftp               将此文件的14行的yes换成no

 

sed -e 's/^/#/g' php_install.sh     将 每行开头都添加上#号

删除操作:d命令

1.删除空白行

sed '/^$/d' passwd.txt == sed -i '/^$/d' passwd.txt

sed -e '/^$/'d passwd.txt(d放‘ ’外边也可以)

sed -e '/^$/d' passwd.txt

cat passwd.txt|grep -v "^$")此命令也可以

2.删除文件第二行

sed -e '2d' passwd.txt

3.删除文件第3行到末尾(包括第三行)

sed -e '3,$d' passwd.txt

sed -i '2,$d' x.txt 

4.删除文件的最后一行

sed -e '$d' passwd.txt

5.删除文件中所有以oldboy开头的行

sed -e '/^oldboy/'d passwd.txt

6.删除文件中所有以nologin结尾的行

sed -e '/nologin$/'d passwd.txt

7.删除文件中以o开头的行

sed -e '/^o,*/d' passwd.txt

8.删除文件中以n结尾的行

sed -e '/n,*$/d' passwd.txt

9.删除第1行到第44行

sed -e '1,44d' passwd.txt

 

 sed命令升华:

^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。 $ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。 . 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。 * 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 [] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。 [^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。 (..) 匹配子串,保存匹配的字符,如s/(love)able/1rs,loveable被替换成lovers。 & 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。 < 匹配单词的开始,如:/ 匹配单词的结束,如/love>/匹配包含以love结尾的单词的行。 x{m} 重复字符x,m次,如:/0{5}/匹配包含5个0的行。 x{m,} 重复字符x,至少m次,如:/0{5,}/匹配至少有5个0的行。 x{m,n} 重复字符x,至少m次,不多于n次,如:/0{5,10}/匹配5~10个0的行。

来自: http://man.linuxde.net/sed
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。 $ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。 . 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。 * 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 [] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。 [^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。 (..) 匹配子串,保存匹配的字符,如s/(love)able/1rs,loveable被替换成lovers。 & 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。 < 匹配单词的开始,如:/ 匹配单词的结束,如/love>/匹配包含以love结尾的单词的行。 x{m} 重复字符x,m次,如:/0{5}/匹配包含5个0的行。 x{m,} 重复字符x,至少m次,如:/0{5,}/匹配至少有5个0的行。 x{m,n} 重复字符x,至少m次,不多于n次,如:/0{5,10}/匹配5~10个0的行。

来自: http://man.linuxde.net/se

已匹配字符串标记&

正则表达式w匹配每一个字母,使用&替换它,&对应之前所匹配到的字母。

echo "thisisatestline"|sed 's/w/& /g'
t h i s i s a t e s t l i n e

正则表达式w+匹配每一个单词,使用&替换它,&对应之前所匹配到的单词。

echo "this is a test line"|sed 's/w+/& /g'
this  is  a  test  line

echo "this is a test line"|sed 's/w+/[&]/g'
[this] [is] [a] [test] [line]

附加方法:

echo "asdfghjkl"|sed -e 's/(.)/1 /g'

将每个单词都加上双引号
echo this is a test line|sed 's/w+/“&”/g'
“this” “is” “a” “test” “line”
在以root开头的

sed -e 's/^root/&_localhost/g' passwd.txt |grep root
root_localhost:x:0:0:root:/root:/bin/bash

11.sed 命令分组匹配分隔

解释:(.) 里面有几个点就是已几个字符为一组

1#:这个就是1后面是什么就以什么为分隔符

以每个字符为分隔后面加上空格

[root@www ~]# echo "asdfghjklqwertyuiopzxvcbnm"|sed 's/(.)/1 /g'
a s d f g h j k l q w e r t y u i o p z x v c b n m

以每2个字符为分隔后面加上空格

[root@www ~]# echo "asdfghjklqwertyuiopzxvcbnm"|sed 's/(..)/1 /g'
as df gh jk lq we rt yu io pz xv cb nm

以每3个字符为分隔后面加上空格
[root@www ~]# echo "asdfghjklqwertyuiopzxvcbnm"|sed 's/(...)/1 /g'
asd fgh jkl qwe rty uio pzx vcb nm

以#号为分隔符分隔每个字符

echo "asdfghjklqwertyuiopzxvcbnm"|sed 's/(.)/1#/g'  
a#s#d#f#g#h#j#k#l#q#w#e#r#t#y#u#i#o#p#z#x#v#c#b#n#m#

以空格为分隔符按照4242的方式分隔

ed -e 's/(....)(..)/1 2 /g' sed.txt|head -n1
root :x :0:0 :r oot: /r oot: /b in/b as h

12.子串匹配标记1

echo aaa BBB|sed 's/([a-z]+)/1/'
aaa BBB

echo aaa BBB|sed 's/([a-z]+) ([A-Z]+)/1/'
aaa

echo aaa BBB|sed 's/([a-z]+) ([A-Z]+)/1 2/'

aaa BBB

echo aaa BBB|sed 's/([a-z]+) ([A-Z]+)/2 1/'
BBB aaa

13.

14.

15.

16.

17.

18.

19.

20.

原文地址:https://www.cnblogs.com/xiaoyongzhuo/p/7452118.html