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