2012-02-07 63 views
15

我有一些Bash Shell命令的輸出數據。輸出用「\ n」或「\ 0」逐行分隔。我想知道有沒有什麼方法可以將輸出轉換爲Perl,並在Perl中逐行處理數據(就像將輸出管道輸出爲awk一樣,但在我的情況下則是在Perl上下文中)。我想,該命令可能是這樣的:如何將Bash Shell命令的輸出逐行傳遞給Perl以進行正則表達式處理?

Bash Shell command | perl -e 'some perl commands' | another Bash Shell command 

假設我想替換所有「:」「逐行」字符「@」字符的基礎上(而不是全局替換,我可以使用條件,例如奇數行或偶數行,以確定當前行是否應該有替換),那麼我怎麼能做到這一點。

回答

20

請參閱perlrun

perl -lpe's/:/@/g'  # assumes \n as input record separator 
perl -0 -lpe's/:/@/g' # assumes \0 as input record separator 

perl -lne'if (0 == $. % 2) { s/:/@/g; print; }' # modify and print even lines 

是的,Perl可能會出現在管道中的任何地方,就像awk一樣。

+0

非常感謝。有用。 – user1129812 2012-02-07 11:28:22

4

命令行開關-p(如果你想自動打印)或-n(如果你不想要它)會做你想做的。該行內容是$ _所以:

perl -pe's/\./\@/g'

將是一個解決方案。一般來說,你想閱讀'<>'(鑽石)操作符,這是非線索的方法。

+2

如果您正在命令行上編寫整個程序,則還需要-e標誌。 (否則它將無法找到名爲「s /\./\@/ g」的Perl腳本) – SkryneSaver 2012-02-07 10:19:55

相關問題