問題:有個文件test的內容以下:正則表達式
ert fff ** [abcfd] 123 324 444 [rty] ** fgfgf
需求:怎麼能截取 [abcfd] ~ [rty] 這幾行的內容出來呢?bash
答案:測試
sed -n '4,8'p test
上面代碼確實可以解決問題,若是咱們設想一下test文件的行爲1000行或者更多10000行咱們又該怎麼去解決呢?code
sed -nr '/(abcfd)/,/rty/'p test
咱們能夠匹配內容去尋找對應的匹配,更符合解決問題的方案。字符串
1.把每一個單詞的第一個小寫字母變大寫:test
[root@yolks1 awk]# sed 's/\b[a-z]/\u&/g' test_awk.txt 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
2.把全部小寫變大寫:awk
[root@yolks1 awk]# sed 's/[a-z]/\u&/g' test_awk.txt 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
3.大寫變小寫:sed
[root@yolks1 awk]# sed -i 's/[a-z]/\u&/g' test_awk.txt #變成大寫並保存 [root@yolks1 awk]# cat test_awk.txt 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 [root@yolks1 awk]# sed 's/[A-Z]/\l&/g' test_awk.txt #變回小寫去 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
測試文件study.txt文件內容以下循環
[root@yolks1 awk]# cat study.txt asjksjks vnsksksl adkldsklsk;d l;ksd;lsl;s 230939kkdklksks dksks;ld
匹配以a字母開頭的行結尾加 "1234"文件
[root@yolks1 awk]# sed -r 's/(^a.*)/\1 1234/' study.txt asjksjks 1234 vnsksksl adkldsklsk;d 1234 l;ksd;lsl;s 230939kkdklksks dksks;ld
[root@yolks1 awk]# cat study_sed.txt a b c d e f g h j k l [root@yolks1 awk]# [root@yolks1 awk]# sed '/c/{p;:a;N;$!ba;d}' study_sed.txt a b c
咱們來拆解下此命令的選項:
通俗理解:
if 匹配"c"
:a
追加下一行
if 不匹配"$"
goto a
最後退出循環,d命令刪除。
[root@yolks1 awk]# sed -n '1,100{/root/p}' test_awk.txt