sed 扩展

打印某行到某行之间的内容

 http://ask.apelearn.com/question/559

例如:有个文件test的内容以下:
ert
fff
**
[abcfd]
123
324
444
[rty]
**
fgfgf
怎么能截取
 [abcfd]
123
324
 444
[rty]
 这一部分出来呢?
[root@yong-02 sed]# sed -n '/\[abcfd\]/,/\[rty\]/p' 1.txt 
[abcfd]
123
324
444
[rty]
  • 这里要注意:先匹配[abcfd]的时候,要先将[]脱意,加-r 脱意不行的,要用\脱意;
[root@yong-02 sed]# sed -n '/\[abcfd\]/p' 1.txt 
[abcfd]

sed转换大小写 http://ask.apelearn.com/question/7758linux

  • sed中,使用\u表示大写,\l表示小写
  • 把每一个单词的第一个小写字母变大写:
[root@yong-02 sed]# 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只能匹配字母、数字、汉字、下划线。spa

&表示前面匹配的内容code

  • 把全部小写变大写  \u表示大写:
[root@yong-02 sed]# sed   's/[a-z]/\u&/g' 1.txt
ERT
FFF
**
[ABCFD]
123
324
444
[RTY]
**
FGFGF
  • 大写变小写 \l表示小写:
[root@yong-02 sed]# cat 2.txt 
ERT
FFF
**
[ABCFD]
123
324
444
[RTY]
**
FGFGF

[root@yong-02 sed]# sed   's/[A-Z]/\l&/g' 2.txt
ert
fff
**
[abcfd]
123
324
444
[rty]
**
fgfgf

 

sed在某一行最后添加一个数字

http://ask.apelearn.com/question/288

[root@linux-128 test]# cat 3.txt
 askdj
 aslkd aslkdjf3e
 skdjfsdfj
 sdkfjk
 fsdkfjksdjfkjsdf
12sdfesdf
 aslkdjfkasdjf asdlfkjaskdfj
  • 在因此行后面加上数字123 sed 's/\(.*\)/\1 123/' 3.txt 或sed 's/\(.*\)/&123/' 3.txt 
[root@yong-02 sed]# sed 's/\(.*\)/\1 123/' 3.txt 
skdj 123
aslkd aslkdjf3e 123
skdjfsdfj 123
sdkfjk 123
fsdkfjksdjfkjsdf 123
12sdfesdf 123
aslkdjfkasdjf asdlfkjaskdfj 123
  • 在以a开头的行后面加上数字123 sed 's/\(^a.*\)/123/' 3.txt  或sed 's/\(^a.*\)/&123/' 3.txt
[root@yong-02 sed]# sed 's/\(^a.*\)/&123/' 3.txt 
skdj
aslkd aslkdjf3e123
skdjfsdfj
sdkfjk
fsdkfjksdjfkjsdf
12sdfesdf
aslkdjfkasdjf asdlfkjaskdfj123
  • 用\1来表示前面()内容
[root@yong-02 sed]# sed  's/\(^a.*\)/\1123/'g 3.txt 
skdj
aslkd aslkdjf3e123
skdjfsdfj
sdkfjk
fsdkfjksdjfkjsdf
12sdfesdf
aslkdjfkasdjf asdlfkjaskdfj123

删除某行到最后一行 

http://ask.apelearn.com/question/213

[root@linux-128 test]# cat 3.txt
askdj
aslkd aslkdjf3e
skdjfsdfj
sdkfjk
fsdkfjksdjfkjsdf
12sdfesdf
aslkdjfkasdjf asdlfkjaskdfj
  • 删除sdkfjk到最后一行
[root@yong-02 sed]# sed '/sdkfjk/,$'d 3.txt 
skdj
aslkd aslkdjf3e
skdjfsdfj
  • 删除指定行的下一行到最后一行 例如删除123后面的行
[root@yong-02 sed]# cat 2.txt 
ERT
FFF
**
[ABCFD]
123
324
444
[RTY]
**
FGFGF
[root@yong-02 sed]# sed '/123/{p;:a;N;$!ba;d}' 2.txt 
ERT
FFF
**
[ABCFD]
123

 定义一个标签a,匹配c,而后N把下一行加到模式空间里,匹配最后一行时,才退出标签循环,而后命令d,把这个模式空间里的内容所有清除。字符串

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

http://ask.apelearn.com/question/1048

格式:sed  -n '1,100{/abc/p}'  1.txtget

[root@yong-02 sed]# cat 2.txt
ERT
FFF
**
[ABCFD]
123
324
444
[RTY]
**
FGFGF

方法一:io

[root@yong-02 sed]# sed  -n '1,10{/324/p}'  2.txt
324

方法二:test

[root@yong-02 sed]# sed  -n '1,10'p  2.txt|sed -n '/324/'p
324
相关文章
相关标签/搜索