sed擴展

  1. 打印某行到某行之間的內容 http://ask.apelearn.com/question/559
例如:有個文件test的內容以下:
ert
fff
**
[abcfd]
123
324
444
[rty]
**
fgfgf
怎麼能截取
 [abcfd]
123
324
 444
[rty]
 這一部分出來呢?
[root@linux-128 test]# sed -n  '/\[abcfd\]/,/\[rty\]/'p 1.txt
[abcfd]
123
324
444
[rty]
  • 這裏要注意:先匹配[abcfd]的時候,要先將[]脫意,加-r 脫意不行的,要用\脫意;
[root@linux-128 test]# sed -n  '/\[abcfd\]/'p 1.txt
[abcfd

sed轉換大小寫 http://ask.apelearn.com/question/7758linux

  • sed中,使用\u表示大寫,\l表示小寫
  1. 把每一個單詞的第一個小寫字母變大寫:
[root@linux-128 test]# sed   's/\b[a-z]/\u&/g' 1.txt
Ert
Fff
**
[Abcfd]
123
324
444
[Rty]
**
Fgfgf
  • 注意:\b:表示\b就近匹配,好比\bAB 匹配A,AB\b 匹配B;\b只能匹配字母、數字、漢字、下劃線。&表示前面匹配的內容
  1. 把全部小寫變大寫:
[root@linux-128 test]# sed   's/[a-z]/\u&/g' 1.txt
ERT
FFF
**
[ABCFD]
123
324
444
[RTY]
**
FGFGF
  1. 大寫變小寫:
[root@linux-128 test]# cat 2.txt
ERT
FFF
**
[ABCFD]
123
324
444
[RTY]
**
FGFGF


[root@linux-128 test]# sed 's/[A-Z]/\l&/'g 2.txt
ert
fff
**
[abcfd]
123
324
444
[rty]
**
fgfgf
  1. sed在某一行最後添加一個數字http://ask.apelearn.com/question/288
[root@linux-128 test]# cat 3.txt
 askdj
 aslkd aslkdjf3e
 skdjfsdfj
 sdkfjk
 fsdkfjksdjfkjsdf
12sdfesdf
 aslkdjfkasdjf asdlfkjaskdfj
  1. 在因此行後面加上數字123
[root@linux-128 test]# sed -r  's/(.*)/&123/'g 3.txt
askdj123
aslkd aslkdjf3e123
skdjfsdfj123
sdkfjk123
fsdkfjksdjfkjsdf123
12sdfesdf123
aslkdjfkasdjf asdlfkjaskdfj123
  1. 在以a開頭的行後面加上數字123
[root@linux-128 test]# sed -r  's/(^a.*)/&123/'g 3.txt
askdj123
aslkd aslkdjf3e123
skdjfsdfj
sdkfjk
fsdkfjksdjfkjsdf
12sdfesdf
aslkdjfkasdjf asdlfkjaskdfj123
  1. 用\1來表示前面()內容
[root@linux-128 test]# sed -r  's/(^a.*)/\1123/'g 3.txt
askdj123
aslkd aslkdjf3e123
skdjfsdfj
sdkfjk
fsdkfjksdjfkjsdf
12sdfesdf
aslkdjfkasdjf asdlfkjaskdfj123
  1. 刪除某行到最後一行 http://ask.apelearn.com/question/213
[root@linux-128 test]# cat 3.txt
askdj
aslkd aslkdjf3e
skdjfsdfj
sdkfjk
fsdkfjksdjfkjsdf
12sdfesdf
aslkdjfkasdjf asdlfkjaskdfj
  1. 刪除sdkfjk到最後一行
[root@linux-128 test]# sed  '/sdkfjk/,$'d 3.txt
askdj
aslkd aslkdjf3e
skdjfsdfj
  1. 刪除指定行的下一行到最後一行
[root@linux-128 test]# cat 2.txt
ERT
FFF
**
[ABCFD]
123
324
444
[RTY]
**
FGFGF


[root@linux-128 test]# sed '/123/{p;:a;N;$!ba;d}' 2.txt
ERT
FFF
**
[ABCFD]
123
  1. 打印1到100行含某個字符串的行 http://ask.apelearn.com/question/1048
[root@linux-128 test]# cat 2.txt
ERT
FFF
**
[ABCFD]
123
324
444
[RTY]
**
FGFGF

方法一:code

[root@linux-128 test]# sed -n '1,10{/123/p}' 2.txt
123

方法二:字符串

[root@linux-128 test]# sed -n '1,10'p 2.txt |sed -n '/123/'p
123
相關文章
相關標籤/搜索