2010-05-13 27 views
4

我需要轉義\ n等輸出我真的得到新行或選項卡如何爲Makefile編寫一行Perl,以便我可以將文字 n轉換爲換行符?

$ perl -p -e 's/e/a/ge' 

現在我想每個電子郵件與\ n

$ perl -p -e 's/e/\n/ge' 

被取代,但即使\ n給我一個錯誤。

這是一個簡化的例子。在實際的腳本(生成文件)我有

substitute := perl -p -e 's/@([^@]+)@/defined $$ENV{$$1} ? $$ENV{$$1} : $$1/ge' 

和目標我有這樣一個很好的命令

$(substitute) $< > [email protected] 

並且如果perl的輸入文件包含\n在輸出我會從字面上看它...我想要有真正的換行符。

回答

4

取出e修改和替代將正常工作:

perl -p -e 's/e/\n/g' file 

perldoc perlop

e Evaluate the right side as an expression. 

UPD:如果你想保留它,把轉義序列在雙引號:

perl -p -e 's/e/"\n"/ge' file 
+0

我猜是否需要它,因爲這在實際情況下是'perl -p -e's/@([^ @] +)@/defined $ $ ENV {$$ 1}? $$ ENV {$$ 1}:$$ 1/ge''。而這個東西去makefile ...真實世界太複雜^^ – Pablo 2010-05-13 14:22:50

+0

@邁克爾 - 那裏的'\ n'或'\ t'在哪裏? – Joe 2010-05-13 14:39:15

+0

@Joe:我已經更新了我原來的帖子。對不起,我認爲事情很簡單......看起來不是。 – Pablo 2010-05-13 14:41:36

3

你真的不需要e在您的正則表達式:

[email protected]:~/private/home_html$ perl -p -e 's/e/\n/g' 
foedoe 
fo 
do 
3

要插的是自己需要插值(如變量或逃逸)的東西,使用雙e和添加引號:

​​

這是行不通的,如果替代本身包含未轉義的「或$或@;在這種情況下,您需要分別進行反斜槓轉義處理。

0
echo xeieio | perl -pe 's/(.)/$k=$1;$k=~s#e#\n#;$k/ge' 

輸出:

X

IO

它能做什麼......每個角色,將其分配給$ K,運行一個簡單的S /ë/\ n/on $ k,然後打印$ k。 (另外,一如既往,有多種方法可以做到這一點)

相關問題