例如:有個檔案test的內容如下:
ertfff
**[abcfd]
123324
444[rty]
**fgfgf
怎麼能擷取[abcfd]到[rty]之間的內容呢?
參考:sed -nr '/[abcfd]/,/[rty]/p' tets
。sed單引號中命令可以有範圍匹配和指定動作,範圍可以是像1,5
指定行,也可以把數字換成匹配行內容的正規表示式。
sed中,使用\u
表示大寫,\l
表示小寫。
例1. 把每個單詞的第乙個小寫字母變大寫:
sed 's/\b[a-z]/\u&/g' filename
\b
代表單詞開始或結尾,&代表當下匹配的整體。
例2. 把所有小寫變大寫:
sed 's/[a-z]/\u&/g' filename
例3. 大寫變小寫:
sed 's/[a-z]/\l&/g' filename
例如在test檔案中a開頭的行末新增12:sed 's/\(^a.*\)/\1 12/' test
。\1
代表前面圓括號的整體,也可以用&代替。
另外補充幾個命令:
sed '/c/' test
定義乙個標籤a,匹配c,然後n把下一行加到模式空間裡,匹配最後一行時,才退出標籤迴圈,然後命令d,把這個模式空間裡的內容全部清除。
if 匹配"c"
:a追加下一行
if 不匹配"$"
goto a
最後退出迴圈,d命令刪除。
參考:sed -n '1,100' 1.txt
也可以用多個命令配合管道符完成。上面這個命令提現了sed和awk命令形式的相通性,大括號用來擴起命令組。
awk鞏固擴充套件
選項 v可以實現使用外部變數。如 a 44echo abcd awk v get a a 說明 v選項用於定義引數,這裡表示將變數a的值賦予get a。如果有多個變數需要賦值,就需要多個 v選項。需求 把兩個檔案中,第一列相同的行合併到同一行中。舉個例子,有兩個檔案,內容如下 cat 1.txt 1...
sed 擴充套件
練習題 第一次做題10 13都不會做 1 把 etc passwd 複製到 root test.txt,用sed列印所有行 root centos7 2 tmp cat etc passwd root test.txt sed n 1,p root test.txt 2 列印test.txt的3到1...
鞏固練習3
1.新建使用者組,shengchan,caiwu,jishu 2.新建使用者要求如下 1 adminsc 的初始組為shengchan 2 admincw的初始組為caiwu 3 adminjs的初始組為jishu 4 tem 是shengchan組的附加使用者 5 harry是caiwu組的附加使...