sed 学习笔记
2010-03-30 12:15
176 查看
声明:
这些代码只是为了学习和理解sed命令而为之,并不
代表问题的唯一解或最佳解,希望各位拍砖
参考资
料:<sed&awk.pdf>等
一. 替换
1.神奇变换(y
命令的使
用)
测试
将
文件中1
换成A
将文件中2
换成B
...
将文件中0
换成J
注意变换关系是按两个list的位置对应变换,y是一个管局命令,拒绝使用后缀flag/g
list1:1234567890
list2:ABCDEFGHIJ
下
面再作一个与前例相反的变换
2.替换每行第一个匹配
举例:
3.替换每行第n(如果有的
话)个匹配
4.替换每行所有匹配
二.行号处理
1.
为文件加行号
举例
2.仅为文件中的正文行加行
号
举例
三.字串翻转
举例
四.选择性输出
1.打印文档奇数行(隔行输出)
2.打印偶数行(隔行输出)
3.删除连续重复行(大量使
用了pattern space 文件太大时要注意)
举例
4.合并上下行并以空格相分
隔
举例
5.将以/符号结尾的行与下行合并并以空格分隔(拼接断行)
举例
6.按关键字拼接行
如果某行以=开始,则合并到上一行并替代=为空格
举例
7.输出匹配行的下一行
举例
8.显示匹配行的行号并输出
匹配行的上行、匹配行、下行
sed -n -e '/regexpr/{=;x;1!p;g;$!N;p;D;}'
-e h
举例
9.删除文档中某标志区域内
的关键字匹配行
删除文档中从being开到end结束的块中包含myword的行
测试
五.字串解析
1.从字串中解析出两个子串(前2各字符和后9个字符)
2.分解日期串
这些代码只是为了学习和理解sed命令而为之,并不
代表问题的唯一解或最佳解,希望各位拍砖
参考资
料:<sed&awk.pdf>等
一. 替换
1.神奇变换(y
命令的使
用)
代码: |
sed 'y/ori_letter_list/target_letter_list/' filename |
代码: |
cat filename 1234567890 2345678901 3456789012 4567890123 |
将
文件中1
换成A
将文件中2
换成B
...
将文件中0
换成J
代码: |
sed 'y/1234567890/ABCDEFGHIJ/' filename ABCDEFGHIJ BCDEFGHIJA CDEFGHIJAB DEFGHIJABC |
list1:1234567890
list2:ABCDEFGHIJ
下
面再作一个与前例相反的变换
代码: |
sed 'y/0987654321/ABCDEFGHIJ/' filename JIHGFEDCBA IHGFEDCBAJ HGFEDCBAJI GFEDCBAJIH |
代码: |
sed 's/regexpr/anyword/' filename sed 's/regexpr/anyword/1' filename |
引用: |
cat filename 1234567890 2345678901 3456789012 4567890123 sed 's/5/五/' filename 1234五67890 2345 678901 34五6789012 45 67890123 |
话)个匹配
代码: |
sed "s/regexpr/anyword/${n}" filename cat filename 111111111111111111 222222222222222222 333333333333333333 444444444444444444 举 例 sed "s/4/ 四 /8" filename 111111111111111111 222222222222222222 333333333333333333 4444444 四 4444444444 |
代码: |
cat filename 1234567890 2345678901 3456789012 4567890123 |
代码: |
举例: sed 's/3/三/g' filename 12三4567890 2三45678901 三456789012 456789012三 |
1.
为文件加行号
代码: |
sed = filename|sed 'N;s//n/:/' cat filename 111111111111111111 222222222222222222 333333333333333333 444444444444444444 |
代码: |
sed = filename|sed 'N;s//n/:/' filename 1:111111111111111111 2:222222222222222222 3:333333333333333333 4:444444444444444444 |
号
代码: |
sed /./= a|sed '/./N;s//n/:/' |
代码: |
cat filename 111111111111111111 222222222222222222 333333333333333333 444444444444444444 sed /./= a|sed '/./N;s//n/:/' filename 1:111111111111111111 3:222222222222222222 4:333333333333333333 6:444444444444444444 |
代码: |
sed '//n/!G;s//(./)/(.*/n/)/&/2/1/;//D;s/.//' |
代码: |
echo 1234567890|sed '//n/!G;s//(./)/(.*/n/)/&/2/1/;//D;s/.//' 0987654321 |
1.打印文档奇数行(隔行输出)
代码: |
sed 'n;d' sed 'x;$!N;x' sed -n 'p;n' 1 3 5 7 |
代码: |
sed -n 'n;p' sed '1d;n;d;' 2 4 6 8 |
用了pattern space 文件太大时要注意)
代码: |
sed '$!N; /^/(.*/)/n/1$/!P; D' #使用 $!N 要当心内存溢出 |
代码: |
cat file 111111111111111111 222222222222222222 222222222222222222 333333333333333333 444444444444444444 444444444444444444 444444444444444444 444444444444444444 444444444444444444 sed '$!N; /^/(.*/)/n/1$/!P; D' filename 111111111111111111 222222222222222222 333333333333333333 444444444444444444 |
隔
代码: |
sed '$!N;s//n/ /' |
代码: |
cat file 1234567890 0987654321 执行命令后 1234567890 0987654321 |
代码: |
sed -e :a -e '///$/N; s////n/ /; ta' |
代码: |
cat filename 1 111111111111111111/ 2 222222222222222222 3 333333333333333333/ 4 444444444444444444 sed -e :a -e '///$/N; s////n/ /; ta' filename 1 111111111111111111 2 222222222222222222 3 333333333333333333 4 444444444444444444 |
如果某行以=开始,则合并到上一行并替代=为空格
代码: |
sed -e :a -e '$!N;s//n=/ /;ta' -e 'P;D' |
代码: |
cat file 111111111111111111 222222222222222222 =333333333333333333 444444444444444444 sed -e :a -e '$!N;s//n=/ /;ta' -e 'P;D' filename 111111111111111111 222222222222222222 333333333333333333 444444444444444444 |
代码: |
sed -n '/regexpr/{n;p;}' filename |
代码: |
cat filename 1 111111111111111111 2 222222222222222222 3 333333333333333333 4 444444444444444444 sed -n '/^3/{n;p;}' filename 4 444444444444444444 |
匹配行的上行、匹配行、下行
sed -n -e '/regexpr/{=;x;1!p;g;$!N;p;D;}'
-e h
举例
代码: |
cat filename 1 111111111111111111 2 222222222222222222 3 333333333333333333 4 444444444444444444 sed -n -e '/^3/{=;x;1!p;g;$!N;p;D;}' -e h filename 3 #匹配行的行号 2 222222222222222222 #上一行 3 333333333333333333 #匹配行 4 444444444444444444 #下一行 |
的关键字匹配行
删除文档中从being开到end结束的块中包含myword的行
代码: |
sed '/^begin/,/^end/{/myword/d;}' filename |
引用: |
cat filename myword begin myword Number! myword Number! myword Number! myword Number! end myword Number! |
引用: |
myword begin Number! Number! Number! Number! end myword Number! |
1.从字串中解析出两个子串(前2各字符和后9个字符)
代码: |
echo "WeLoveChinaUnix"|sed -e 'H;s//(../).*//1/;x;s/.*/(./{9/}/)$//1/;x;G;s//n/ /' We ChinaUnix |
代码: |
echo 20030922|sed 's//(..../)/(../)/(../)//1 /2 /3/'|read year month day echo $year $month $day 2003 09 22 |
相关文章推荐
- sed 命令学习笔记
- Sed学习笔记
- Shell脚本学习笔记(七)--sed和awk
- SED,AWK学习笔记Part 1-----利用正则表达式进行文本匹配
- sed命令 学习笔记
- sed 学习笔记
- sed学习笔记
- linux学习笔记(18) - sed和awk
- Linux学习笔记:sed
- Sed学习笔记
- sed学习笔记(1) - 入门知识
- [转]sed 学习笔记
- sed学习笔记
- 马哥linux学习笔记:sed工具使用详解
- 12、sed、awk、数组 学习笔记
- shell脚本学习笔记(一)—— shell基础及sed
- Linux命令shell脚本编程学习笔记-18章初识sed和gawk
- 个人学习笔记--sed命令(进阶篇)
- sed 学习笔记
- SED 学习笔记