复习 扩展 打印某行到某行之间的内容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 # 六周第四次课(9月7日) 复习 、 扩展 # 打印某行到某行之间的内容 http://ask.apelearn.com/question/559 - 打印文件中特定的某行到某行之间的内容 sed 例如:有个文件test的内容如下: ``` ert fff ** [abcfd] 123 324 444 [rty] ** fgfgf ``` 怎么能截取 ``` [abcfd] 123 324 444 [rty] ``` 这一部分出来呢? 1.先要在test文件里有这些内容 用vim 打开test文件,把这些内容放进去 ``` [[email protected] sed]# vim test [[email protected] sed]# cat test ert fff ** [abcfd] 123 324 444 [rty] ** fgfgf [[email protected] sed]# ``` 2.现在要把[abcfd]到[rty] 这中间的段位截取出来并且打印到屏幕上 答案: sed -n ‘/\[abcfd\]/,/\[rty\]/p‘ test ``` [[email protected] sed]# sed -n ‘/\[abcfd\]/,/\[rty\]/‘p test [abcfd] 123 324 444 [rty] [[email protected] sed]# ``` # sed转换大小写 http://ask.apelearn.com/question/7758 - 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 -实验用test文件来做实验 1.把每个单词的第一个小写字母变大写 -命令解释 :\b边界,放在开头就代表开头 放在结尾就代表结尾 ,在替换字符串中,&代表搜索字符串[RE]所匹配的字符串的值, -sed中,使用\u表示大写,\l表示小写 ``` [[email protected] sed]# cat test ert fff ** [abcfd] 123 324 444 [rty] ** fgfgf [[email protected] sed]# sed ‘s/\b[a-z]/\u&/g‘ test Ert Fff ** [Abcfd] 123 324 444 [Rty] ** Fgfgf [[email protected] sed]# ``` 2. 把所有小写变大写: sed ‘s/[a-z]/\u&/g‘ test -命令解释:[a-z]代表所有字母,\u代表大写 ``` [[email protected] sed]# sed ‘s/[a-z]/\u&/g‘ test ERT FFF ** [ABCFD] 123 324 444 [RTY] ** FGFGF [[email protected] sed]# ``` 3. 大写变小写: sed ‘s/[A-Z]/\l&/g‘ test -命令解释:[A-Z]代表所有大写字母 \l 代表小写 ``` [[email protected] sed]# sed ‘s/[A-Z]/\l&/g‘ test ert fff ** [abcfd] 123 324 444 [rty] ** fgfgf [[email protected] sed]# ``` # sed在某一行最后添加一个数字 http://ask.apelearn.com/question/288 - 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 12 ``` -实验vim test1 把上面文本内容放进test1里面 ``` [[email protected] sed]# vim test1 [[email protected] sed]# cat test1 askdj aslkd aslkdjf3e skdjfsdfj sdkfjk fsdkfjksdjfkjsdf 12sdfesdf aslkdjfkasdjf asdlfkjaskdfj [[email protected] sed]# ``` -在以a字母开头的行添加一个数字12 -命令解释:(^a.*)以a字母开头的行 \1 12 ,\1表示前面的 (^a.*) ,\1 12表示在 (^a.*)里面内容里后面加上12 ``` [[email protected] sed]# sed ‘s/\(^a.*\)/\1 12/‘ test1 askdj 12 aslkd aslkdjf3e 12 skdjfsdfj sdkfjk fsdkfjksdjfkjsdf 12sdfesdf aslkdjfkasdjf asdlfkjaskdfj 12 [[email protected] sed]# ``` # 删除某行到最后一行 http://ask.apelearn.com/question/213 - sed删除某关键字的下一行到最后一行 [[email protected] ~]# cat test a b c d e f [[email protected] ~]# sed ‘/c/{p;:a;N;$!ba;d}‘ test a b c - 解释:定义一个标签a,匹配c,然后N把下一行加到模式空间里,匹配最后一行时,才退出标签循环,然后命令d,把这个模式空间里的内容全部清除。 if 匹配"c" :a 追加下一行 if 不匹配"$" goto a 最后退出循环,d命令删除。 - 实验:把之前的test文件内容改变成上面内容一样 ``` [[email protected] sed]# vim test [[email protected] sed]# cat test a b c d e f [[email protected] sed]# ``` - 删除某关键字的下一行到最后一行 ``` [[email protected] sed]# sed ‘/c/{p;:a;N;$!ba;d}‘ test a b c [[email protected] sed]# ``` -也可以用这个命令sed -r ‘/d/,$d‘ test -命令解释:sed -r ‘/关键词/,$d‘ test ``` [[email protected] sed]# sed -r ‘/d/,$d‘ test a b c [[email protected] sed]# ``` - sed -r ‘/关键词/,$d‘ test 这里的关键词 打印出来的是关键词上面的 ``` [[email protected] sed]# sed -r ‘/a/,$d‘ test [[email protected] sed]# sed -r ‘/b/,$d‘ test a [[email protected] sed]# sed -r ‘/c/,$d‘ test a b [[email protected] sed]# sed -r ‘/d/,$d‘ test a b c [[email protected] sed]# sed -r ‘/e/,$d‘ test a b c d [[email protected] sed]# sed -r ‘/f/,$d‘ test a b c d e ``` -命令解释:sed -r ‘/关键词/,$d‘ test 全部打印出来,最后一个是f, f后面试最后一个 以#代表 ``` [[email protected] sed]# sed -r ‘/#/,$d‘ test a b c d e f [[email protected] sed]# ``` # 打印1到100行含某个字符串的行 http://ask.apelearn.com/question/1048 - 如何使用sed打印1到100行包含某个字符串的行 - 这个需求,其实就是sed指定行范围匹配,较少见。实现:sed -n ‘1,100{/abc/p}‘ 1.txt - 这个命令也好像可以实现 sed -n ‘1,100p‘ 1.txt|sed -n ‘/abc/‘p - 命令解释:1到100行 包含“abc”的 给打印出来 - 打印1-6行 含有a字母的行 ``` [[email protected] sed]# cat test a b c d e f [[email protected] sed]# sed -n ‘1,6{/a/p}‘ test a [[email protected] sed]# ``` - 再编辑下文件test,打印1到6行 中 包含字母a的 行 ``` [[email protected] sed]# cat test a b c da ea f [[email protected] sed]# [[email protected] sed]# sed -n ‘1,6{/a/p}‘ test a da ea [[email protected] sed]# ```
时间: 2024-10-12 08:36:37