linux的sed命令是什么,linux sed命令
linux sed命令
簡介:
sed是一種流編輯器,它一次處理一行內(nèi)容。處理時,把當(dāng)前處理的行存儲在臨時緩沖區(qū)中,稱為“模式空間”(pattern
space),接著用sed命令處理緩沖區(qū)中的內(nèi)容,處理完成后,把緩沖區(qū)的內(nèi)容送往屏幕。接著處理下一行,這樣不斷重復(fù),直到文件末尾。文件內(nèi)容并沒有
改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件,簡化對文件的反復(fù)操作,編寫轉(zhuǎn)換程序等。
補(bǔ)充:提取某一行中的內(nèi)容而用sed 匹配時,一定要先匹配到那一行后然后用后向引用把那一行中的所去的內(nèi)容用反向引用 \1 或者 & **把它提取出來
用法:
sed [option]… ? ?' script ' ? ?inputfile…
常用選項(xiàng):
-n:不輸出模式空間內(nèi)容的自動打印
-e: 多點(diǎn)編輯
-f/PATH/TO/SCRIPT_FILE: 從指定文件中讀取編輯腳本
-r: 支持使用擴(kuò)展正則表達(dá)式
-i: 原處編輯
script:
' ?地址命令 ?'
地址定界:
(1) 不給地址:對全文進(jìn)行處理
(2) 單地址:
#:?指定的行
/pattern/:被此處模式所能夠匹配到的每一行
(3) 地址范圍:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
(4) ~:步進(jìn)
1~2?奇數(shù)行(顯示奇數(shù)行)
2~2?偶數(shù)行(顯示偶數(shù)行)
記住:單引號' ' 里面的是地址命令,要加地址范圍 / /才能匹配
編輯命令:
d:???刪除模式空間匹配的行**p:???顯示模式空間中的內(nèi)容**a?\text:?在行后面追加文本;支持使用\n實(shí)現(xiàn)多行追加**i?\text:?在行前面插入文本;支持使用\n實(shí)現(xiàn)多行插入**c?\text:?替換行為單行或多行文本**w?/path/to/somefile:????保存模式匹配的行至指定文件**r?/path/from/somefile:??讀取指定文件的文本至模式空間中匹配到的行后**=:???為模式空間中的行打印行號**!:???模式空間中匹配行取反處理**
s///:查找替換,支持使用其它分隔符,s@@@,s###
替換標(biāo)記:
如果不加?就說明只??替換每行的第一個匹配到的內(nèi)容
g:?行內(nèi)全局替換
p:?顯示替換成功的行
w?/PATH/TO/SOMEFILE:將替換成功的行保存至文件中
其中&表示 /1/&/ 這里的&就是1的內(nèi)容
在aaa后面添加字段:sed?-ne?'s/aaa/HELLO&/p'?test
輸出結(jié)果:HELLOaaa
在前后同時添加:sed?-ne?'s/aaa/&HELLO&/p'?test
輸出結(jié)果:aaaHELLOaaa
以行為單位的新增/刪除
這種只是行內(nèi)操作
練習(xí)
1、將 /etc/passwd 的內(nèi)容列出并且列印行號,同時,請將第 2~5 行刪除!
[root@www?~]#?nl?/etc/passwd?|?sed?'2,5d'
1?root:x:0:0:root:/root:/bin/bash
6?sync:x:5:0:sync:/sbin:/bin/sync
7?shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
2、僅列出 /etc/passwd 文件內(nèi)的第 5-7 行
[root@www?~]#?nl?/etc/passwd?|?sed?-n?'5,7p'
5?lop:x:4:7:lop:/var/spool/lopd:/sbin/nologin
6?sync:x:5:0:sync:/sbin:/bin/sync
7?shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
3、多點(diǎn)編輯:一條sed命令,刪除/etc/passwd第三行到末尾的數(shù)據(jù),并把bash替換為sheller
nl?/etc/passwd?|?sed?-e?'3,$d'?-e?'s/bash/sheller/'
1??root:x:0:0:root:/root:/bin/sheller
2??daemon:x:1:1:daemon:/usr/sbin:/bin/sh
4、從某行到某行的打印
sed?-n?'/^root/,/^s/p'?/etc/passwd
*后向引用的用法,匹配等用法:
1、刪除/etc/grub2.conf文件中所有以空白開頭的行行首的空白字符
[root@qzx?tmp]#?sed?'s@^[[:space:]]+@@'?/etc/grub.conf
#?grub.conf?generated?by?anaconda
#
#?Note?that?you?do?not?have?to?rerun?grub?after?making?changes?to?this?file
#?NOTICE:??You?have?a?/boot?partition.??This?means?that
2、刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符
[root@qzx?tmp]#?sed??'s@^#[[:space:]]\+@@'?/etc/fstab
3、在/root/install.log每一行行首增加#號
#Installing?ipw2200-firmware-3.1-4.el6.noarch
#Installing?rootfiles-8.1-6.1.el6.noarch
#Installing?man-pages-3.22-20.el6.noarch
#Installing?words-3.0-17.el6.noarch
#***?FINISHED?INSTALLING?PACKAGES?***[root@qzx?tmp]#?^C
[root@qzx?tmp]#?sed?'s$^$#$'?/root/install.log
4、在/etc/fstab文件中不以#開頭的行的行首增加#號
[root@qzx?tmp]#?sed??'s@^#[[:space:]]\+@@'?/etc/fstab
5、處理/etc/fstab路徑,使用sed命令取出其目錄名和基名
基名:
[root@qzx?tmp]#?echo?/etc/init/rc.conf/?|?sed?-r?'s@.*/([^/]+/?$)@\1@'
rc.conf/
[root@qzx?tmp]#?echo?/etc/init/rc.conf?|?sed?-r?'s@.*/([^/]+/?$)@\1@'
rc.conf
路徑名:
[root@qzx?tmp]#?echo?/etc/init/rc.conf?|?sed?-r?'s@(.*/)[^/]+/?$@\1@'
/etc/init/
6、利用sed 取出ifconfig命令中本機(jī)的IPv4地址
[root@qzx?tmp]#?ifconfig?|sed?-n?'2p'?|sed?-r?'s@.*addr:(.*)B.*@\1@'
10.1.253.75
7、統(tǒng)計centos安裝光盤中Package目錄下的所有rpm文件的
以.分隔倒數(shù)第二個字段的重復(fù)次數(shù)
[root@qzx?Packages]#?ls?*.rpm??|sed?-r?'s#.*\.(.*)\.rpm#\1#'|sort?|uniq?-c
4?i686
919?noarch
2283?x86_64
其他高級編輯命令:
h: 把模式空間中的內(nèi)容覆蓋至保持空間中
H:把模式空間中的內(nèi)容追加至保持空間中
g: 從保持空間取出數(shù)據(jù)覆蓋至模式空間
G:從保持空間取出內(nèi)容追加至模式空間
x: 把模式空間中的內(nèi)容與保持空間中的內(nèi)容進(jìn)行互換
n: 讀取匹配到的行的下一行覆蓋至模式空間
N:追加匹配到的行的下一行至模式空間
d: 刪除模式空間中的行
D:刪除當(dāng)前模式空間開端至\n的內(nèi)容(不在傳至標(biāo)準(zhǔn)輸出),放棄之后的命令,但是對剩余模式空間重新執(zhí)行sed
保持空間,一次處理不完保存的地方
實(shí)例
sed -n 'n;p' FILE
打印偶數(shù)行
sed '1!G;h;$!d' FILE
倒序排列行 想到于 tac
sed '$!N;$!D' FILE
保留后兩行
sed '$!d' FILE
只保留最后一行
sed ‘G’ FILE
加空行
sed ‘g’ FILE
顯示10個空行
sed ‘/^$/d;G’ FILE
刪除多余的空行,并在每行后加一個空行
sed 'n;d' FILE
[root@qzx ~]# sed 'n;d' qzx.txt
1
3
5
7
9
sed -n '1!G;h;$p' FILE
[root@qzx ~]# sed -n '1!G;h;$p' qzx.txt
10
9
8
7
6
4
5
3
2
1
原創(chuàng)文章,作者:qzx,如若轉(zhuǎn)載,請注明出處:http://www.178linux.com/32322
總結(jié)
以上是生活随笔為你收集整理的linux的sed命令是什么,linux sed命令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吴裕雄 Bootstrap 前端框架开发
- 下一篇: 友善之臂编linux内核,友善之臂Nan