- 论坛徽章:
- 1
|
本帖最后由 通幽tongyou 于 2015-08-14 17:37 编辑
遇到了一个这样的问题,有一个名为testcorrection.txt的文件,内容如下:
| CN010645 || RELEASE || PRFILEGX.PAC 15.67-0 &DIPT IMG
ABCDEFG.PAC 9.8-0 &Q IMG
HIGKLMN.PAC 2.4-0 &Q IMG
|| Lily (lily@sina.com) || GROUP1 || Accepted |
| CN010851 || RELEASE || PRFILEGX.PAC 15.67-0 &DIPT IMG
OPQRSTU.PAC 4.57-0 &DIPT IMG
ISLEJXIL.PAC 9.8-0 &Q IMG
|| zhangli(zhangli@sina.com) || GROUP2 || Accepted |
目的是处理完之后的文件内容是这样的:
| CN010645 || RELEASE || PRFILEGX.PAC 15.67-0 ,ABCDEFG.PAC 9.8-0 ,HIGKLMN.PAC 2.4-0 ,|| Lily (lily@sina.com) || GROUP1 || Accepted |
| CN010851 || RELEASE || PRFILEGX.PAC 15.67-0 ,OPQRSTU.PAC 4.57-0 ,ISLEJXIL.PAC 9.8-0 ,|| zhangli(zhangli@sina.com) || GROUP2 || Accepted |
思想是这样的:
1)找到以IMG结尾的行
2)找到IMG结尾的行之后,IMG和它之前的那几个字符(比如&Q IMG或者&DIPT IMG)替换为空格
3)如果成功的话,跳转到标签:a
4) 标签a内容:读取下一行,并且把行尾的\n替换为逗号
5)现在文本文件中是有两段
| CN010645.....
.............
||Lily
这样的内容,我把寻址的地址设置为了/^\| CN/,/^ \|\|/ 是以| CN开头的地址开始,一直到以||开头的开始结束
【我是想设置这样的寻址,会相当于一个循环,对两段的| CN.. 都会做相同的处理】
我是这样写的:
sed -i "/^\| CN/,/^ \|\|/{:a;N;s/\n/,/g;/IMG$/s#.\{6\}IMG# #g;ta;}" testcorrection.txt
但是输出结果是这样的:
| CN010645 || RELEASE || PRFILEGX.PAC 15.67-0 ,ABCDEFG.PAC 9.8-0 ,HIGKLMN.PAC 2.4-0 ,|| Lily (lily@sina.com) || GROUP1 || Accepted |,| CN010851 || RELEASE || PRFILEGX.PAC 15.67-0 ,OPQRSTU.PAC 4.57-0 ,ISLEJXIL.PAC 9.8-0 ,|| zhangli(zhangli@sina.com) || GROUP2 || Accepted |
把所有的内容都连在了一起。
各位能帮忙看一下吗,是哪里需要改动的,谢谢了! |
|