Re: [问题] 请问指定行以后n行 要如何加上特定字符

楼主: Neisseria (Neisseria)   2015-07-22 03:33:47
※ 引述《thisgo (寻梦园)》之铭言:
: file.txt
: AAAAA
: BBBBB
: CCCCC
: DDDDD
: EEEEE
: FFFFF
: 想改成 找到CCCCC之后的三行 前面加上@
: 如
: AAAAA
: BBBBB
: @CCCCC
: @DDDDD
: @EEEEE
: FFFFF
如果不限定非用 sed 不可,可以用 perl 当成伪 sed
因为 Perl 本身即是完整的程式语言,处理起来反而比较简单
参考以下指令(因较长,拆成三行)
$ perl -p -e 'if (/CCCCC/) { $flag = 1; }'\
'if ($flag > 0) { s/(.+)/@\1/; $flag++; }'\
'if ($flag > 3) { $flag = 0; }' file.txt
如果结果符合自己的需要,就加上 -i 参数就可以修改 file.txt
作者: flu (Crazy Rhythm)   2015-07-22 08:53:00
支援一下N板友,以下的Perl一行文是将输入合成一列来看待perl -we ' local $/; $_ = <>; s/^ (CCCCC \s*?) ^ (.+?) ^/\@$1\@$2\@$3/mxs ; print; ' < file.txt不过建议用此较长一点的版本 http://bit.ly/1ROsOZR不好意思第二个推文的pattern少了一组 (...) 正确版本在连结页面中的shorter-version处$perl -pe'(/CCCCC/..$i==2)?($i++,s/^/@/):($i=0)'<file.txt这是逐行处理的版本
楼主: Neisseria (Neisseria)   2015-07-23 21:52:00
flu 大的方法好有趣,很像在写 Perl 的感觉
作者: danny8376 (钓到一只猴子@_@)   2015-07-23 23:22:00
疴... 不就是在写perl吗www
作者: flu (Crazy Rhythm)   2015-07-24 00:00:00
其实…完全不推荐别人用这种写法就是了 :p原因是上面的变量$i的visibility和","的用法
作者: thisgo (寻梦园)   2015-07-24 23:30:00
谢谢楼上f大跟N大 只可惜perl无法用 希望是可以用sed解决谢谢分享^^

Links booklink

Contact Us: admin [ a t ] ucptt.com