2012-02-13 33 views
0

我正在嘗試使用grep命令的輸出在所有找到的文件中進行替換。問題是發現的一些文件名稱中有空格。這裏是我使用的一個簡化的grep命令(它可以在多個郵件主機上找到多個名稱)。處理由grep生成的filelist,但名稱有空格

grep -Ril [email protected] * 

這將產生有我需要的文件,剛剛上市的文件名(在-l選項)的列表。使用反引號,我喂的文件名到Perl一行代碼:

perl -pi -e 's/oldname\@foo\.com/newname\@bar.com/gi' `grep -Ril [email protected] *` 

這當沒有列出的文件正好有名稱中有空格,但是當一個人做,它打破工作。

發現我知道我可以使用-print0xargs -0,但似乎沒有什麼等效的grep

我可以把grep的輸出放到一個文件中,然後閱讀,但現在我想知道這是否可能作爲單線程。

回答

0

我的grep在每個文件名後都有一個-Z --null選項來輸出NUL,你可以在perl -0中使用它。

+0

不知何故,我沒有看到。我可以發誓我讀了grep的整個手冊頁。技術上解決了我的問題,但我仍然在做錯事。將Z作爲開關添加到grep將刪除文件之間的新行。但是,當我將-0添加到我的perl命令時,它不能正確識別文件分隔符。它現在抱怨它無法找到(例如)file1.txtfile2.txtfile3.txt,這是目錄中的前三個文件。 – user1207446 2012-02-13 20:20:48

+0

繼續我自己的評論,它使用-Z與grep(由jbowes註明),然後發送到perl使用xargs -0而不是perl -0的答案。所以:'grep -ZRILIE「foo」* | xargs -0 perl -pi -e's/foo/bar/gi'' – user1207446 2012-02-15 16:46:13