分享
 
 
 

sed学习笔记

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

声明:这些代码只是为了学习和理解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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有