2013-08-05 62 views
1

我有一行純文本,需要在'<'和'/>'中打包。將字符添加到每行的開頭*和結尾*

所以我能做到這一點perl -pe 's/^/</' myfile,然後再做一次替換^$

反正用一行代碼要做到這一點,而不是在文件迭代的兩倍?

在sed或awk中可以做得更好嗎?怎麼樣 ?

+0

所有答案都不錯。 cjm獲得了速度的xtra點:) – eramm

回答

3
perl -pe 's/^/</; s!$!/>!' myfile 

您可以使用任意數量的語句;只是用分號分開它們。爲了清晰起見,當正則表達式包含/時,請使用備用分隔符。

+1

爲了清楚起見,PBP建議使用'{}':'perl -pe'{^} {<}; s{$}{/>}'myfile' – shawnhcorey

0
perl -pe 's/^.*$/<$0\/>/mg' myfile 

編輯:上述發現不正確—看到@cjm意見,以下。

+0

兩個簡單的正則表達式通常比一個更復雜的正則表達式快(在這種情況下,沒有必要捕獲任何東西)。另外,不需要'/ g'修飾符;您一次只處理一行。它只是減慢搜索另一場比賽的速度。 – cjm

+0

我最初沒注意到的一個更嚴重的問題是'$ 0'不是正則表達式匹配的文本。這是程序名稱(在這種情況下是'-e')。你的意思是'$&'。 – cjm

+0

@cjm - 啊,謝謝你的更正。當我發現'$ 0'令人驚訝時,我會留下我的回答,其他人也可能會這樣。但是+1給你。 –

2

另一種方式(但速度更快:-))

perl -i -ne 'chomp;print "<$_>\n"' myfile 
相關問題