sed命令的用法
sed命令的詳細學習:
Sed的常用選項:
-n:只顯示sed匹配到的行。其余行不顯示。
-i:可以直接操作原文件。默認情況下sed不會改變原文件,但是-i選項可以修改原文件,此選項應慎用。
-r:可以使用標準正則表達式。默認情況下sed只支持基本正則表達式,但是加上-r選項后則支持擴展正則表達式
-e:多腳本共用。可以同時執行多個命令。
常見的用法(格式):
替換操作:s命令
sed -e 's/原來的內容/要替換的內容/g'文件名
sed -i's/原來的內容/要替換的內容/g' 文件名
追加操作:a命令(追加的指定內容的后面)
在第一行的后面追加一行
sed-i1axiaochaox.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'1isedcommandstart'myfile 行首添加一行
sed-i'$asedcommandend'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.
總結
- 上一篇: python socket epoll_
- 下一篇: oracle select 行数据_【赵