例如:有個文件test的內容以下: ert fff ** [abcfd] 123 324 444 [rty] ** fgfgf 怎麼能截取 [abcfd] 123 324 444 [rty] 這一部分出來呢?
[root@hf-01 sed]# sed -n '/\[abcfd\]/,/\[rty\]/'p 1.txt //截取[abcfd]到[rty]之間的內容 [abcfd] 123 324 444 [rty] [root@hf-01 sed]#
這裏不能加-r 參數,只能使用 \ 脫義字符(有多是逗號 , 的存在,致使加-r 參數沒法正常所有脫義)nginx
擴展知識bash
二. sed轉換大小寫日誌
[root@hf-01 sed]# sed 's/\b[a-z]/\u&/'g test.txt //把每一個單詞的第一個小寫字母變成大寫 Root:X:0:0:Root:/Root:/Bin/Bash Bin:X:1:1:Bin:/Bin:/Sbin/Nologin Adas:124:Bdsf:Rto:Pass Daemon:X:2:2:Daemon:/Sbin:/Sbin/Nologin Dfdf:Rggo:124 等等等,只截取了一部分 [root@hf-01 sed]#
[root@hf-01 sed]# sed 's/[a-z]/\u&/'g test.txt //把文件中全部小寫字母變成大寫 ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN ADAS:124:BDSF:RTO:PASS DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN DFDF:RGGO:124 ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN 等等等,只截取了一部分 [root@hf-01 sed]#
在使用-i 參數後,會直接更改文件內容code
[root@hf-01 sed]# sed 's/[A-Z]/\l&/'g test.txt //把文件中全部的大寫字符變成小寫 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin adas:124:bdsf:rto:pass daemon:x:2:2:daemon:/sbin:/sbin/nologin dfdf:rggo:124 等等等,只截取了一部分 [root@hf-01 sed]#
總結字符串
\b 表示單詞的邊界get
& 表示 第一個 // 裏面的內容io
\u表示大寫test
\l表示小寫awk
三. sed在某一行最後添加一個數字ftp
[root@hf-01 sed]# head -n1 test.txt |sed 's/\(^r.*\)/\1 12/' //在以r 字母開頭的行,結尾處添加數字123 root:x:0:0:root:/root:/bin/bash 12 [root@hf-01 sed]# head -n1 test.txt |sed 's/\(^r.*\)/& 123/' //在以r 字母開頭的行,結尾處添加數字123 root:x:0:0:root:/root:/bin/bash 123 [root@hf-01 sed]# head -n1 test.txt |sed 's/\(^r.*\)/1 123/' //這裏是將以r 字母開頭的行,替換成1 123 1 123
這裏的 \1 應該指的是前面 // 的內容
& 表示 第一個 // 裏面的內容
擴展知識
四. 刪除某行到最後一行
sed刪除某關鍵字的下一行到最後一行
[root@test200 ~]# cat test a b c d e f [root@test200 ~]# sed '/c/{p;:a;N;$!ba;d}' test a b c
分析
使用sed打印1到100行包含某個字符串的行
sed -n '1,100{/abc/p}' 1.txt
sed -n '1,100{/abc/p;/dd/p}' 2.txt