我有以下格式的文件:使用Perl正則表達式多行重新格式化文件
(類型1的數據:1)
乙
乙
(類型1的數據:2)
乙
乙
乙
(類型1的數據:3)
乙
..
現在我要重新格式化此文件,以便它看起來像:
(類型1的數據:1)BB
(類型1的數據:2)BBB
(類型1的數據:3)乙
...
我的方法是用perl正則表達式在命令行中,
cat file | perl -pe 's/\n(B)/ $1/smg'
我的理由是,以取代與空間換行字符。 但它似乎沒有工作。你能幫我麼?由於
我有以下格式的文件:使用Perl正則表達式多行重新格式化文件
(類型1的數據:1)
乙
乙
(類型1的數據:2)
乙
乙
乙
(類型1的數據:3)
乙
..
現在我要重新格式化此文件,以便它看起來像:
(類型1的數據:1)BB
(類型1的數據:2)BBB
(類型1的數據:3)乙
...
我的方法是用perl正則表達式在命令行中,
cat file | perl -pe 's/\n(B)/ $1/smg'
我的理由是,以取代與空間換行字符。 但它似乎沒有工作。你能幫我麼?由於
的-p一次讀取一行,於是就有了「\ n」之後的沒什麼配合。
perl -pe 'chomp; $_ = ($_ =~ /Type/) ? "\n".$_ : " ".$_'
這幾乎是你想要的,但在開始時增加了一個額外的換行符,並且失去了最後的換行符。
這是一個涉及多一點爲-n
和-p
適合最好的一次處理一個線,而你的要求是幾行合併,這意味着你必須保持狀態一會兒。
所以剛讀內存中的整個文件,並應用正則表達式是這樣的:
perl -lwe^
"local $/; local $_ = <>; print join q(), split /\n/ for m/^\(Type [^(]*/gsm"
使用輸入重定向(<
)餵你的文件,這個前衛的STDIN。
注意這個語法是Windows的命令行。對於Bash,使用單引號引用腳本。
請放棄無用的'貓'。 perl -pe'...'讀取STDIN或一個或多個文件而沒有這種開銷。 – JRFerguson 2011-12-17 22:08:20