sed 擴展

打印某行到某行之間的內容

例如:有個文件test的內容以下:
ert
fff
**
[abcfd]
123
324
444
[rty]
**
fgfgf
怎麼能截取
[abcfd]
123
324
444
[rty]
這一部分出來呢?
答案: sed -n '/\[abcfd\]/,/\[rty\]/p' testspa

sed轉換大小寫

sed中,使用\u表示大寫,\l表示小寫
1. 把每一個單詞的第一個小寫字母變大寫:
sed 's/\b[a-z]/\u&/g' filename
2. 把全部小寫變大寫:
sed 's/[a-z]/\u&/g' filename
3. 大寫變小寫:
sed 's/[A-Z]/\l&/g' filename字符串

sed在某一行最後添加一個數字

sed 's/\(^a.*\)/\1 12/' test
#cat  test
askdj
aslkd aslkdjf3e
skdjfsdfj
sdkfjk
fsdkfjksdjfkjsdf
12sdfesdf
aslkdjfkasdjf asdlfkjaskdfj
#sed 's/\(^a.*\)/\1 12/' test
askdj 12
aslkd aslkdjf3e  12
skdjfsdfj
sdkfjk
fsdkfjksdjfkjsdf
12sdfesdf
aslkdjfkasdjf asdlfkjaskdfj  12test

刪除某行到最後一行

[root@test200 ~]# cat test
a
b
c
d
e
f
[root@test200 ~]# sed '/c/{p;:a;N;$!ba;d}' test
a
b
c

定義一個標籤a,匹配c,而後N把下一行加到模式空間裏,匹配最後一行時,才退出標籤循環,而後命令d,把這個模式空間裏的內容所有清除。

if 匹配"c"
:a
追加下一行
if 不匹配"$"
goto a
最後退出循環,d命令刪除。sed

打印1到100行含某個字符串的行

這個需求,其實就是sed指定行範圍匹配,較少見。實現:file

sed  -n '1,100{/abc/p}'  1.txtsdk

相關文章
相關標籤/搜索