文本處理工具sed常用命令

sed 是一個文本處理工具,可以將數據進行替換、新增、選取等特定工作

格式
sed 選項 動作 文件名

使用sed替換文件中某個域的字段
比如寫的一個yaml文件中間有個字段需要修改,可以使用sed在外面命令行進行替換
格式:sed 's/原字符/新的字符/‘ 文件名

[root@zhaocheng ~]# sed 's/systemctl/service/' filetest 
root:$1$dDTFylQ3$.vTZKpm7mrra9WMsxvBfW.:18241:0:99999:7
bin:*:17834:0:99999:7:dad
lp:*:17834:0:99999:7ada
sync:*:17834:0:99999:7:::gg
shutdown:*:17834:0:99999:7::da
halt:*:17834:0:99999:7::fsda
nginx:!!:18289::::::daaf
rabbitmq:!!:18297:::::dada
service start mysqld
dadad:nginx:sdada

上面輸出的只會輸出到屏幕上,並不會修改文件,如果直接替換可以添加-i

[root@zhaocheng ~]# sed -i 's/systemctl/service/' filetest 
[root@zhaocheng ~]# cat filetest 
root:$1$dDTFylQ3$.vTZKpm7mrra9WMsxvBfW.:18241:0:99999:7
bin:*:17834:0:99999:7:dad
lp:*:17834:0:99999:7ada
sync:*:17834:0:99999:7:::gg
shutdown:*:17834:0:99999:7::da
halt:*:17834:0:99999:7::fsda
nginx:!!:18289::::::daaf
rabbitmq:!!:18297:::::dada
service start mysqld
dadad:nginx:sdada

sed 參數含義指令

常用命令:
a 新增
c 取代
d 刪除
i 插入
p 列印
s 取代

刪除某行
如果處理文本的時候需要進行一些行的刪除,可以使用d,代表刪除
不加sed -i 不會刪除,不加只會顯示屏幕上

[root@zhaocheng]# sed '1d' filetest                     //刪除第一行
[root@zhaocheng]# sed '$d' filetest                    //刪除最後一行
[root@zhaocheng]# sed '1,2d' filetest                 //刪除第一行到第二行
[root@zhaocheng]# sed '3,$d' filetest                  //刪除第三行到最後一行

顯示某行
比如處理文本的時候需要提取文本的某個某行

[root@zhaocheng]# sed -n '1p' filetest                //顯示第一行 
[root@zhaocheng]# sed -n '$p' filetest                //顯示最後一行
[root@zhaocheng]# sed -n '1,2p' filetest            //顯示第一行到第二行
[root@zhaocheng]# sed -n '3,$p' filetest            //顯示第三行到最後一行

使用模式進行查詢
比如處理比較大的文本想找出這個字段,那麼直接可以使用-n 參數顯示,動作指定需要提取的關鍵詞,p進行打印

[root@zhaocheng]# sed -n '/bin/p' filetest        //查詢包括關鍵字bin所在所有行

[root@zhaocheng]# sed -n '/\$/p' filetest 
service start mysqld$

//查詢包括關鍵字$所在所有行,使用反斜線\屏蔽特殊含義,不然識別不出

新增一行或者多行字符串
比如處理文本進行添加字段,並指定添加到某行,可以使用a,是增加,1a就是在第一行下去增加,如果字段比較多可以使用在vim中使用set nu,顯示行號,或者直接在命令行使用cat -n 直接顯示行號,在命令行使用sed '行數a xxxxxx 文件名
在第一行的下面新增一行

[root@zhaocheng ~]# sed '1a sed is very useful' filetest 
bin:*:17834:0:99999:7:dad
sed is very useful
lp:*:17834:0:99999:7ada
sync:*:17834:0:99999:7:::gg
shutdown:*:17834:0:99999:7::da
halt:*:17834:0:99999:7::fsda
nginx:!!:18289::::::daaf
rabbitmq:!!:18297:::::dada
service start mysqld$
dadad:nginx:sdada%

在第2行與第3行增加sed is very useful

[root@zhaocheng ~]# sed '2,3a sed is very useful' filetest 
bin:*:17834:0:99999:7:dad
lp:*:17834:0:99999:7ada
sed is very useful
sync:*:17834:0:99999:7:::gg
sed is very useful

進行替代行,這裏我將第一行替換成kuberntes,1c就是第一行,c就是替換

[root@zhaocheng ~]# sed '1c kubernetes' filetest 
kubernetes
lp:*:17834:0:99999:7ada
sync:*:17834:0:99999:7:::gg
shutdown:*:17834:0:99999:7::da
halt:*:17834:0:99999:7::fsda
nginx:!!:18289::::::daaf
rabbitmq:!!:18297:::::dada
service start mysqld$
dadad:nginx:sdada%

在文件首行添加字符串,1i就是第一行,i就是插入的意思

[root@zhaocheng ~]# sed -i '1i linux' filetest
[root@zhaocheng ~]# cat filetest
linux
ROOT:x:98:0:ROOT:/ROOT:/usr/local
halt$:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

將這個文本的最後一行添加jenkins,$就是最後一行,a是添加

[root@zhaocheng ~]# sed -i '$a jenkins' filetest
[root@zhaocheng ~]# cat filetest
hellp
sync:*:17834:0:99999:7:::gg
shutdown:*:17834:0:99999:7::da
halt:*:17834:0:99999:7::fsda
dadad:nginx:sdada%
jenkins

刪除匹配的行,匹配的jenkins這個行,進行刪除

[root@zhaocheng ~]# sed -i '/jenkins/d' filetest
[root@zhaocheng ~]# cat filetest
hellp
sync:*:17834:0:99999:7:::gg
shutdown:*:17834:0:99999:7::da
halt:*:17834:0:99999:7::fsda
dadad:nginx:sdada%

指定某行進行添加#,&匹配任意字符

[root@zhaocheng ~]# sed -i 's/^sync/#&/' filetest
[root@zhaocheng ~]# cat filetest
ROOT:x:98:0:ROOT:/ROOT:/usr/local
halt$:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#sync:x:5:0:sync:/sbin:/bin/sync

替換開頭以#sync的字符,也就是將#去掉

[root@zhaocheng ~]# sed -i 's/^#sync/sync/' filetest
[root@zhaocheng ~]# cat filetest
ROOT:x:98:0:ROOT:/ROOT:/usr/local
halt$:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt$:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

將裏面以小寫的字符都在前面添加#

[root@zhaocheng ~]# sed -i 's/^[a-z]/#&/' filetest
[root@zhaocheng ~]# cat filetest
ROOT:x:98:0:ROOT:/ROOT:/usr/local
#halt$:x:0:0:root:/root:/bin/bash
#bin:x:1:1:bin:/bin:/sbin/nologin
#daemon:x:2:2:daemon:/sbin:/sbin/nologin
#adm:x:3:4:adm:/var/adm:/sbin/nologin
#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#sync:x:5:0:sync:/sbin:/bin/sync
#shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
#halt$:x:7:0:halt:/sbin:/sbin/halt
#mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
#operator:x:11:0:operator:/root:/sbin/nologin

將以大寫字母與小寫字母的字符串都添加註釋

[root@zhaocheng ~]# sed 's/^[a-zA-Z]/#&/' filetest
#ROOT:x:98:0:ROOT:/ROOT:/usr/local
#halt$:x:0:0:root:/root:/bin/bash
#bin:x:1:1:bin:/bin:/sbin/nologin
#daemon:x:2:2:daemon:/sbin:/sbin/nologin
#adm:x:3:4:adm:/var/adm:/sbin/nologin
#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin`
#sync:x:5:0:sync:/sbin:/bin/sync
#shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
#halt$:x:7:0:halt:/sbin:/sbin/halt
#mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
#operator:x:11:0:operator:/root:/sbin/nologin

匹配文本中帶#的並刪除掉,這裏使用^以#開頭/d是刪除

[root@zhaocheng ~]# cat filetest
#hellp
#sync:*:17834:0:99999:7:::gg
#shutdown:*:17834:0:99999:7::da
halt:*:17834:0:99999:7::fsda
dadad:nginx:sdada%
[root@zhaocheng ~]# sed -i '/^#/d' filetest
[root@zhaocheng ~]# cat filetest
halt:*:17834:0:99999:7::fsda
dadad:nginx:sdada%

刪除文本中每行以數字開頭的

[root@zhaocheng ~]# cat filetest
1fghjkl
2ghjkl;'
3fghjkl;
4dfghjkl;
[root@zhaocheng ~]# sed -i 's/^[0-9]//g' filetest
[root@zhaocheng ~]# cat filetest
fghjkl
ghjkl;'
fghjkl;
dfghjkl;

刪除文本中所有帶註釋開頭的行

[root@zhaocheng ~]# sed -i 's/^#//g' filetest
[root@zhaocheng ~]# cat filetest
ROOT:x:98:0:ROOT:/ROOT:/usr/local
halt$:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt$:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章