日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sed行文本处理工具

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sed行文本处理工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Sed是一種流編輯器,過濾和替換文本

工作原理:

? 簡單的來說,Sed一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱之為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行。直到文件末尾。

語法:

sed [option] [script'(sed自帶語法腳本)] [input-file處理的文件]

sed [選項] + "地址+命令 " file

常用option參數(+描述):

--help:獲取幫助信息;
-n:
不輸出模式空間內容到屏幕,即不自動打印,配合編輯命令只打印符合條件字符串;
-e:多點編輯,可添加多個腳本;
-f:/PATH/SCRIPT_FILE,從指定文件中讀取編輯腳本;
-i:原文件編輯(直接修改原處理文件),不添加-i參數,不會對原文件進行修改;
-r :支持使用擴展的正則表達式;

Script:

? 地址+命令

? 地址:

? ?1.不給地址:對全文進行處理;

? ?2.單地址:

? ? ?#:指定的行(1p,2p...)

? ? ?/pattern/:被模式匹配匹配到的字串行

? ?3.范圍地址:

? ? ?#,#:第幾行只第幾行(1,2p)

? ? ?#,+#:從第#行起始向后+#行

? ? ?/pat1/,/pat2/:模式1匹配 所在行至模式2匹配所在行

? ? ?#,/pat/:第幾行只模式匹配行? ? ? ? ? ?

? ?4.~:步進

? ? ?1~2:奇數行

? ? ?2~2:偶數行

編輯命令:

d:刪除模式空間匹配的行;
p:顯示模式空間中的內容;
a \text:在指定行后追加文本,支持使用\n多行追加文本;
i \test:在行前面插入文本,支持使用\n實現多行插入;
c \test:替換行為單行或多行文本;
w /PATH/Somefile:保存模式匹配的行至指定文件;
r /PATH/Somefile:讀取指定文件的文本至模式空間中匹配到的行后;
=:為模式空間中的行打印行號;
!:模式空間中匹配行取反操作;

sed查找替換:

s///:查找替換,只是吃用其他分隔符:

? s@@@

? s###

替換標記:

? g:行內全局替換

? p:顯示替換成功的行

? w /PATH/TO/Somefile:將替換成功的行報錯至文件中


操作原文件:

[root@GaoServer?~]#?cat?-n?Test.txt?1 root:x:0:0:root:/root:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologin3 daemon:x:2:2:daemon:/sbin:/sbin/nologin4 adm:x:3:4:adm:/var/adm:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown8 halt:x:7:0:halt:/sbin:/sbin/halt9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin10 operator:x:11:0:operator:/root:/sbin/nologin


匹配打印(p):

#打印匹配root開頭的行: #每一行都讀到模式空間,不加-n參數默認進行輸出,這里看到root:x:0:0:root:/root:/bin/bash輸出兩行 [root@GaoServer?~]#?cat?Test.txt?|?sed?'/^root/p' root:x:0:0:root:/root:/bin/bash root: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@GaoServer?~]#?tail?Test.txt?|?sed?-n?'/^root/p' root:x:0:0:root:/root:/bin/bash#打印包含root的行: [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?-n?'/root/p'1 root:x:0:0:root:/root:/bin/bash10 operator:x:11:0:operator:/root:/sbin/nologin#打印第二行: [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?-n?'2p'2 bin:x:1:1:bin:/bin:/sbin/nologin [root@GaoServer?~]##打印第一行到,第三行: [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?-n?'1,3p'1 root:x:0:0:root:/root:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologin3 daemon:x:2:2:daemon:/sbin:/sbin/nologin#打印第三行起始后三行: [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?-n?'3,+3p'3 daemon:x:2:2:daemon:/sbin:/sbin/nologin4 adm:x:3:4:adm:/var/adm:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync#打印以nologin結尾的行:(匹配) [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?-n?'/nologin$/p'2 bin:x:1:1:bin:/bin:/sbin/nologin3 daemon:x:2:2:daemon:/sbin:/sbin/nologin4 adm:x:3:4:adm:/var/adm:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin10 operator:x:11:0:operator:/root:/sbin/nologin#打印root開頭行至daemon開頭行 [root@GaoServer?~]#?sed?-n?'/^root/,/^daemon/p'?Test.txt? root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin#打印最后一行 [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?-n?'$p'10 operator:x:11:0:operator:/root:/sbin/nologin#不打印最后一行:(“!”表示取反) [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?-n?'$!p'1 root:x:0:0:root:/root:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologin3 daemon:x:2:2:daemon:/sbin:/sbin/nologin4 adm:x:3:4:adm:/var/adm:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown8 halt:x:7:0:halt:/sbin:/sbin/halt9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin#打印奇數行 [root@GaoServer?~]#?cat?-n?Test.txt?|sed?-n?'1~2p'1 root:x:0:0:root:/root:/bin/bash3 daemon:x:2:2:daemon:/sbin:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin#打印偶數行 [root@GaoServer?~]#?cat?-n?Test.txt?|sed?-n?'2~2p'2 bin:x:1:1:bin:/bin:/sbin/nologin4 adm:x:3:4:adm:/var/adm:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync8 halt:x:7:0:halt:/sbin:/sbin/halt10 operator:x:11:0:operator:/root:/sbin/nologin#引用變量:sed命令使用單引號:變量用單引號引起來,sed命令使用雙引號,解釋特殊符號原有意義 [root@GaoServer?~]#?a=1 [root@GaoServer?~]#?b=2 [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?-n?''$a','$b'p'1 root:x:0:0:root:/root:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologin [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?-n?"$a,"$b"p"1 root:x:0:0:root:/root:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologin


匹配刪除(d):

#刪除匹配root行 [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?'/root/d'2 bin:x:1:1:bin:/bin:/sbin/nologin3 daemon:x:2:2:daemon:/sbin:/sbin/nologin4 adm:x:3:4:adm:/var/adm:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown8 halt:x:7:0:halt:/sbin:/sbin/halt9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin#刪除第二行 [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?'2d'1 root:x:0:0:root:/root:/bin/bash3 daemon:x:2:2:daemon:/sbin:/sbin/nologin4 adm:x:3:4:adm:/var/adm:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown8 halt:x:7:0:halt:/sbin:/sbin/halt9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin10 operator:x:11:0:operator:/root:/sbin/nologin#刪除1至9行 [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?'1,9d'10 operator:x:11:0:operator:/root:/sbin/nologin#刪除偶數行 [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?'2~2d'1 root:x:0:0:root:/root:/bin/bash3 daemon:x:2:2:daemon:/sbin:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin#刪除配置文件中以(#開頭的行和空行) [root@GaoServer?~]#?sed?'/^#/d;/^$/d'?/etc/vsftpd/vsftpd.conf? anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES


替換(s///):

#替換root字符串為ROOT,s///:只是替換每行中第一個匹配到的字符串 [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?'s/root/ROOT/'1 ROOT:x:0:0:root:/root:/bin/bash????????????????#第一行中只有第一個root替換成ROOT2 bin:x:1:1:bin:/bin:/sbin/nologin3 daemon:x:2:2:daemon:/sbin:/sbin/nologin4 adm:x:3:4:adm:/var/adm:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown8 halt:x:7:0:halt:/sbin:/sbin/halt9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin10 operator:x:11:0:operator:/ROOT:/sbin/nologin????#唯一一個root#全局替換root字符串為ROOT,s///g [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?'s/root/ROOT/g'1 ROOT:x:0:0:ROOT:/ROOT:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologin3 daemon:x:2:2:daemon:/sbin:/sbin/nologin4 adm:x:3:4:adm:/var/adm:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown8 halt:x:7:0:halt:/sbin:/sbin/halt9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin10 operator:x:11:0:operator:/ROOT:/sbin/nologin#正則匹配 [root@GaoServer?~]#?sed?-n?'s/^root/ROOT/p'?Test.txt? ROOT:x:0:0:root:/root:/bin/bash#分組使用:取出基本名,目錄名 [root@GaoServer?~]#?dirname?/etc/sysconfig/sshd? /etc/sysconfig [root@GaoServer?~]#?basename?/etc/sysconfig/sshd? sshd [root@GaoServer?~]#?echo?"/etc/sysconfig/sshd"?|?sed?-r?'s#(/.*/)([^/]+/?)#\1#' /etc/sysconfig/ [root@GaoServer?~]#?echo?"/etc/sysconfig/sshd"?|?sed?-r?'s#(/.*/)([^/]+/?)#\2#' sshd#使用&命令引用匹配內容并且替換, #注:&代表root,&.1:把root替換成root.1 [root@GaoServer?~]#?cat?-n?Test.txt?|sed?'s/root/&.1/g'1 root.1:x:0:0:root.1:/root.1:/bin/bash ......#為1,2行添加注釋 [root@GaoServer?~]#?cat?-n?Test.txt?|sed?'1,2s/^/#/' #?????1 root:x:0:0:root:/root:/bin/bash #?????2 bin:x:1:1:bin:/bin:/sbin/nologin3 daemon:x:2:2:daemon:/sbin:/sbin/nologin4 ADM:x:3:4:ADM:/var/ADM:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin


多點編輯(-e):

[root@GaoServer?~]#?cat?-n?Test.txt?|sed?-e?'4,5d'?-e?'s/root/ROOT/g'1 ROOT:x:0:0:ROOT:/ROOT:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologin3 daemon:x:2:2:daemon:/sbin:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown8 halt:x:7:0:halt:/sbin:/sbin/halt9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin10 operator:x:11:0:operator:/ROOT:/sbin/nologin


添加/追加內容(a,i,c):

#i:在搜索匹配到的上一行添加 [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?'/root/i?\Root' Root1 root:x:0:0:root:/root:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologin ......#a:在搜索匹配的下一行添加 [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?'/root/a?\Root'1 root:x:0:0:root:/root:/bin/bash Root2 bin:x:1:1:bin:/bin:/sbin/nologin3 daemon:x:2:2:daemon:/sbin:/sbin/nologin ......#c:替換搜索匹配的行 [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?'/root/c?\Root' Root2 bin:x:1:1:bin:/bin:/sbin/nologin3 daemon:x:2:2:daemon:/sbin:/sbin/nologin ......

注:同樣可以指定地址單行添加,指定地址范圍添加......


保存模式匹配的行至指定文件(w):

#匹配1,2行追加Test1 [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?'1,2w?Test1'1 root:x:0:0:root:/root:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologin3 daemon:x:2:2:daemon:/sbin:/sbin/nologin4 adm:x:3:4:adm:/var/adm:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown8 halt:x:7:0:halt:/sbin:/sbin/halt9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin10 operator:x:11:0:operator:/root:/sbin/nologin [root@GaoServer?~]#?cat?Test11 root:x:0:0:root:/root:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologin


讀取指定文件的文本追加至模式空間(r):

#讀取/etc/redhat-release,追加至1,2行 [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?'1,2r?/etc/redhat-release'1 root:x:0:0:root:/root:/bin/bash CentOS?Linux?release?7.2.1511?(Core)?2 bin:x:1:1:bin:/bin:/sbin/nologin CentOS?Linux?release?7.2.1511?(Core)?3 daemon:x:2:2:daemon:/sbin:/sbin/nologin4 adm:x:3:4:adm:/var/adm:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin


匹配到的行號:

#=: [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?-n?'/root/=' 1 10


原文件編輯(i):

[root@GaoServer?~]#??sed?-i?'s/adm/ADM/g'?Test.txt [root@GaoServer?~]#?cat?Test.txt? root: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 ......

注意:由于-i參數修改原配置文件,操作比較危險,可以使用-i.bak執行,生成源文件.bak就是之前沒有改動的文件(bak是自己制定,隨意指定)。

[root@GaoServer?~]#?sed?-i.bak?'1,7d'?Test.txt? [root@GaoServer?~]#?cat?Test.txt 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@GaoServer?~]#?cat?Test.txt.bak????????#原文件備份 root: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


空間操作:

n:讀取匹配到的行的下一行覆蓋至模式空間;
N:讀取匹配到的行的下一行追加至模式空間;
h:模式空間中內容覆蓋至保持空間中;
H:模式空間中的內容追加至保持空間中;
g:從保持空間取出數據覆蓋至模式空間;
G:從保持空間取出內容追加至模式空間;
d:刪除模式空間中的行;
D:刪除當前模式空間開端至\n的內容(不在傳至標準輸出),放棄之后的命令,對剩余模式空間重新執行sed;
x:模式空間中內容與保持空間內容進行互換;
#取出偶數行: [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?-n?'n;p'2 bin:x:1:1:bin:/bin:/sbin/nologin4 ADM:x:3:4:ADM:/var/ADM:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync8 halt:x:7:0:halt:/sbin:/sbin/halt10 operator:x:11:0:operator:/root:/sbin/nologin #取出奇數行: [root@GaoServer?~]#?cat?-n?Test.txt?|?sed?'n;d'1 root:x:0:0:root:/root:/bin/bash3 daemon:x:2:2:daemon:/sbin:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin#倒敘顯示: [root@GaoServer?~]#?cat?-n?Test.txt?|sed?-n?'1!G;h;$p'10 operator:x:11:0:operator:/root:/sbin/nologin9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin8 halt:x:7:0:halt:/sbin:/sbin/halt7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown6 sync:x:5:0:sync:/sbin:/bin/sync5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin4 adm:x:3:4:adm:/var/adm:/sbin/nologin3 daemon:x:2:2:daemon:/sbin:/sbin/nologin2 bin:x:1:1:bin:/bin:/sbin/nologin1 root:x:0:0:root:/root:/bin/bash#打印文件最后一行: [root@GaoServer?~]#?sed?'N;D'?Test.txt operator:x:11:0:operator:/root:/sbin/nologin#在每行后增加空行: [root@GaoServer?~]#?sed?'G'?Test.txt? root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin......


轉載于:https://blog.51cto.com/gning/1962336

總結

以上是生活随笔為你收集整理的sed行文本处理工具的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。