共計 3306 個字符,預(yù)計需要花費(fèi) 9 分鐘才能閱讀完成。
丸趣 TV 小編給大家分享一下 centos 中文本處理工具 sed 怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
sed 行編輯器
sed 是一種流編輯器,它一次處理一行內(nèi)容。處理時,把當(dāng)前處理的行存儲在臨時緩沖區(qū)中,稱為“模式空間”(pattern space),接著用 sed 命令處理緩沖區(qū)中的內(nèi)容,處理完成后,把緩沖區(qū)的內(nèi)容送往屏幕。然后讀入下行,執(zhí)行下一個循環(huán)。如果沒有使諸如‘D’ 的特殊命令,那會在兩個循環(huán)之間清空模式空間,但不會清空保留空間。這樣不斷重復(fù),直到文件末尾。文件內(nèi)容并沒有改變,除非你使用重
定向存儲輸出。
功能
主要用來自動編輯一個或多個文件, 簡化對文件的反復(fù)操作, 編寫轉(zhuǎn)換程序等
常用選項
-n emsp; emsp; 不輸出模式空間內(nèi)容到屏幕,即不自動打印
-e emsp; emsp; 多點(diǎn)編輯
-f /PATH/SCRIPT_FILE emsp; emsp; 從指定文件中讀取編輯腳本
-r emsp; emsp; 支持使用擴(kuò)展正則表達(dá)式
-i.bak emsp; emsp; 備份文件并原處編輯
script emsp; emsp; 地址命令 sed 工具地址定界
(1) 不給地址:對全文進(jìn)行處理
(2) 單地址:
emsp; emsp;#:指定的行,$:最后一行
emsp; emsp;/pattern/:被此處模式所能夠匹配到的每一行
(3) 地址范圍
emsp; emsp;#,#
emsp; emsp;#,+#
emsp; emsp;/pat1/,/pat2/
emsp; emsp;#,/pat1/
(4) ~:步進(jìn)
1~2 奇數(shù)行
2~2 偶數(shù)行 sed 工具
編輯命令
d emsp; emsp; 刪除模式空間匹配的行,并立即啟用下一輪循環(huán)
p emsp; emsp; 打印當(dāng)前模式空間內(nèi)容,追加到默認(rèn)輸出之后
a []text emsp; emsp; 在指定行后面追加文本,支持使用 \n 實(shí)現(xiàn)多行追加
i []text emsp; emsp; 在行前面插入文本
c []text emsp; emsp; 替換行為單行或多行文本
w /path/file emsp; emsp; 保存模式匹配的行至指定文件
r /path/file emsp; emsp; 讀取指定文件的文本至模式空間中匹配到的行后
= emsp; emsp; 為模式空間中的行打印行號
! emsp; emsp; 模式空間中匹配行取反處理 sed 工具
s/// emsp; emsp; 查找替換, 支持使用其它分隔符,s@@@,s###
替換標(biāo)記
g emsp; emsp; 行內(nèi)全局替換
p emsp; emsp; 顯示替換成功的行
w emsp; emsp;/PATH/FILE 將替換成功的行保存至文件中
高級編輯命令
P: emsp; emsp; 打印模式空間開端至 \n 內(nèi)容,并追加到默認(rèn)輸出之前
h: emsp; emsp; 把模式空間中的內(nèi)容覆蓋至保持空間中
H: emsp; emsp; 把模式空間中的內(nèi)容追加至保持空間中
g: emsp; emsp; 從保持空間取出數(shù)據(jù)覆蓋至模式空間
G: emsp; emsp; 從保持空間取出內(nèi)容追加至模式空間
x: emsp; emsp; 把模式空間中的內(nèi)容與保持空間中的內(nèi)容進(jìn)行互換
n: emsp; emsp; 讀取匹配到的行的下一行覆蓋至模式空間
N: emsp; emsp; 讀取匹配到的行的下一行追加至模式空間
d: emsp; emsp; 刪除模式空間中的行
D: emsp; emsp; 如果模式空間包含換行符,則刪除直到第一個換行符的模式空間中的文本,并不會讀取新的輸入行,而使用合成的模式空間重新啟動循環(huán)。如果模式空間不包含換行符,則會像發(fā)出 d 命令那樣啟動正常的新循環(huán)
練習(xí)
\1. 找出 3 到 6 行
\2. 找出 3 到 3 + 2 行
\3. 在第 2 行加入 new line
\4. 在第 11 行加入 test line
\5. 匹配以 alias 開頭的文本保存到 alias.log 里
\6. 在每?后增加?空??
[root@centos ~]# sed G text.txt
\7. 在匹配 regex 的?之后插??空??
[root@centos ~]# sed /regex/G text.txt
\8. sed 將?件 test 中第 50 ?中的 haiwao 改為 haiwai?
[root@centos ~]# sed -n 50p |sed s/haiwao/haiwai/ test
\9. 替換一個文件 /etc/passwd 里的這 root:x:0:0:root:/root:/bin/bash 一行第二個 root 為 test?
[root@centos ~]# cat /etc/passwd| sed /^root/!d |sed s/root/test/2
\10. 打印 /etc/passwd 的奇數(shù)??
[root@centos ~]# sed -n 1~2p /etc/passwd
\11. 打印出 05 點(diǎn)到 12 點(diǎn)之間的所有?志?打印出 05:30:35 到 22:45:55 之間的所有?志?
[root@centos ~]# sed -n /2016\/06\/12 05:00:00/,/2016\/06\/12 12:00:00/p a.log
[root@centos ~]# sed -n /2016\/06\/12 05:30:35/,/2016\/06\/12 22:45:55/p a.log
\12. 刪除 centos7 系統(tǒng) /etc/grub2.cfg ?件中所有以空?開頭的???的空?字符
[root@centos ~]# sed -r s/^[[:blank:]]+// /etc/grub2.cfg
\13. 刪除 /etc/fstab ?件中所有以 #開頭,后??少跟?個空?字符的?的??的# 和空?字符
[root@centos ~]# sed -r s/^#[[:blank:]]+// g /etc/fstab
\14. 在 centos6 系統(tǒng) /root/install.log 每????增加 #號
[root@centos ~]# sed -r s/.*/# / /root/install.log
\15. 在 /etc/fstab ?件中不以 #開頭的?的??增加# 號
[root@centos ~]# sed -r s@^[^#]@# @p /etc/fstab
\16. 處理 /etc/fstab 路徑, 使? sed 命令取出其?錄名和基名
目錄名:
[root@centos ~]# echo /etc/fstab |sed -r s@^(./)([^/]+/?)$@\1@
基名:
[root@centos ~]# echo /etc/fstab |sed -r s@^(./)([^/]+/?)$@\2@
\17. 利? sed 取出 ifconfig 命令中本機(jī)的 IPv4 地址
[root@centos ~]# ifconfig|sed -n /broadcast/p |sed -r s@inet (.) netmask.@\1@
[root@centos ~]# ifconfig ens33 |sed -r 2!d; s@(.inet)(.)(netmask.*)@\2@
\18. 統(tǒng)計 centos 安裝光盤中 Package ?錄下的所有 rpm ?件的以. 分隔倒數(shù)第?個字段的重復(fù)次數(shù)
[root@centos ~]# ls .rpm|sed -r s@^..([^.]+).rpm$@\1@ |sort|uniq -c
[root@centos ~]# ls *.rpm|rev|cut -d. -f2|rev|sort|uniq -c
\19. 統(tǒng)計 /etc/init.d/functions ?件中每個單詞的出現(xiàn)次數(shù),并排序(? grep 和 sed 兩種?法分別實(shí)現(xiàn))
[root@centos ~]# sed -r s/[^[:alpha:]]/\n/g /etc/init.d/functions| sort | uniq -c | sort -nr
[root@centos ~]# egrep -o [[:alpha:]]+ /etc/init.d/functions| sort | uniq -c | sort -nr
\20. 將?本?件的 n 和 n + 1 ?合并為??,n 為奇數(shù)?
[root@centos ~]# seq 10 | sed 1~2N;s/\n/ /
以上是“centos 中文本處理工具 sed 怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!