W6-C4-0502

六周第四次课(5月2日)
复习
扩展
打印某行到某行之间的内容http://ask.apelearn.com/question/559
sed转换大小写 http://ask.apelearn.com/question/7758
sed在某一行最后添加一个数字http://ask.apelearn.com/question/288
删除某行到最后一行 http://ask.apelearn.com/question/213
打印1到100行含某个字符串的行 http://ask.apelearn.com/question/1048

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

文件test的内容如下:

ert
fff
**
[abcfd]
123
324
444
[rty]
**
fgfgf

需要截取

[abcfd]
123
324
444
[rty]

答案: sed -n '/\[abcfd\]/,/\[rty\]/p' test

2. sed转换大小写字母

sed中,\u表示大写,\l表示小写

2.1 把每个单词的第一个小写字母变大写:

sed 's/\b[a-z]/\u&/g' filename
\b表示单词边界
& 表示第一个//中的内容

2.2 把所有小写变大写:

sed 's/[a-z]/\u&/g' filename

2.3 大写变小写:

sed 's/[A-Z]/\l&/g' filename

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

源文件

cat test
askdj
aslkd aslkdjf3e
skdjfsdfj
sdkfjk
fsdkfjksdjfkjsdf
12sdfesdf
aslkdjfkasdjf asdlfkjaskdfj

在a开头的行后加 12
sed 's/\(^a.*\)/\1 12/' test
\表示引用

#结果
askdj 12
aslkd aslkdjf3e 12
skdjfsdfj
sdkfjk
fsdkfjksdjfkjsdf
12sdfesdf
aslkdjfkasdjf asdlfkjaskdfj 12

3. 删除某行到最后一行

[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删除匹配行以及匹配行下一行
sed -i '/sample/{N;d}' filename
//sample是匹配字符,N在这里就是下一行,d是删除

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

sed -n '1,100{/abc/p}' 1.txt 指定行范围匹配

未经允许不得转载:外贸SOHO笔记 » W6-C4-0502

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下作者~

支付宝扫一扫打赏

微信扫一扫打赏