声明:这些代码只是为了学习和理解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 注意变换关系是按两个list的位置对应变换,y是一个管局命令,拒绝使用后缀flag/g list1:1234567890 list2:ABCDEFGHIJ 下面再作一个与前例相反的变换 代码: sed 'y/0987654321/ABCDEFGHIJ/' filename JIHGFEDCBA IHGFEDCBAJ HGFEDCBAJI GFEDCBAJIH 2.替换每行第一个匹配 代码: sed 's/regexpr/anyword/' filename sed 's/regexpr/anyword/1' filename 举例: 引用: cat filename 1234567890 2345678901 3456789012 4567890123 sed 's/5/五/' filename 1234五67890 2345678901 34五6789012 4567890123 3.替换每行第n(如果有的话)个匹配 代码: sed "s/regexpr/anyword/${n}" filename cat filename 111111111111111111 222222222222222222 333333333333333333 444444444444444444 举例 sed "s/4/ 四 /8" filename 111111111111111111 222222222222222222 333333333333333333 4444444 四 4444444444 4.替换每行所有匹配 代码: 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 2.仅为文件中的正文行加行号 代码: 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/;s/.//' 举例 代码: echo 1234567890|sed '///n/!G;s///(.//)//(.*//n//)/&//2//1/;s/.//' 0987654321 四.选择性输出 1.打印文档奇数行(隔行输出) 代码: sed 'n;d' sed 'x;$!N;x' sed -n 'p;n' 1 3 5 7 2.打印偶数行(隔行输出) 代码: sed -n 'n;p' sed '1d;n;d;' 2 4 6 8 3.删除连续重复行(大量使用了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 4.合并上下行并以空格相分隔 代码: sed '$!N;s///n/ /' 举例 代码: cat file 1234567890 0987654321 执行命令后 1234567890 0987654321 5.将以//符号结尾的行与下行合并并以空格分隔(拼接断行) 代码: 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 6.按关键字拼接行 如果某行以=开始,则合并到上一行并替代=为空格 代码: 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 7.输出匹配行的下一行 代码: sed -n '/regexpr/{n;p;}' filename 举例 代码: cat filename 1 111111111111111111 2 222222222222222222 3 333333333333333333 4 444444444444444444 sed -n '/^3/{n;p;}' filename 4 444444444444444444 8.显示匹配行的行号并输出匹配行的上行、匹配行、下行 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 #下一行 9.删除文档中某标志区域内的关键字匹配行 删除文档中从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 2.分解日期串 代码: echo 20030922|sed 's///(....//)//(..//)//(..//)///1 //2 //3/'|read year month day echo $year $month $day 2003 09 22
转自:http://doc.linuxpk.com/3871.html
|
sed学习笔记
最新推荐文章于 2024-11-07 11:17:19 发布