Re: [問題] 請問指定行以後n行 要如何加上特定字元已刪文

看板Linux作者 (Neisseria)時間10年前 (2015/07/22 03:33), 編輯推噓2(2012)
留言14則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 156.40.254.19 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1437507230.A.FA1.html

07/22 08:53, , 1F
支援一下N板友,以下的Perl一行文是將輸入合成一列來看待
07/22 08:53, 1F

07/22 08:54, , 2F
perl -we ' local $/; $_ = <>; s/^ (CCCCC \s*?) ^ (.+?) ^
07/22 08:54, 2F

07/22 08:54, , 3F
/\@$1\@$2\@$3/mxs ; print; ' < file.txt
07/22 08:54, 3F

07/22 09:06, , 4F
不過建議用此較長一點的版本 http://bit.ly/1ROsOZR
07/22 09:06, 4F

07/22 09:07, , 5F
不好意思第二個推文的pattern少了一組 (...) 正確版本在
07/22 09:07, 5F

07/22 09:08, , 6F
連結頁面中的shorter-version處
07/22 09:08, 6F

07/23 07:13, , 7F
$perl -pe'(/CCCCC/..$i==2)?($i++,s/^/@/):($i=0)'<file.txt
07/23 07:13, 7F

07/23 07:13, , 8F
這是逐行處理的版本
07/23 07:13, 8F

07/23 21:52, , 9F
flu 大的方法好有趣,很像在寫 Perl 的感覺
07/23 21:52, 9F

07/23 23:22, , 10F
痾... 不就是在寫perl嗎www
07/23 23:22, 10F

07/24 00:00, , 11F
其實…完全不推薦別人用這種寫法就是了 :p
07/24 00:00, 11F

07/24 00:07, , 12F
原因是上面的變數$i的visibility和","的用法
07/24 00:07, 12F

07/24 23:30, , 13F
謝謝樓上f大跟N大 只可惜perl無法用 希望是可以用sed解決
07/24 23:30, 13F

07/24 23:30, , 14F
謝謝分享^^
07/24 23:30, 14F
文章代碼(AID): #1LhfwU-X (Linux)
文章代碼(AID): #1LhfwU-X (Linux)