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] *`
這當沒有列出的文件正好有名稱中有空格,但是當一個人做,它打破工作。
發現我知道我可以使用-print0
和xargs -0
,但似乎沒有什麼等效的grep
。
我可以把grep
的輸出放到一個文件中,然後閱讀,但現在我想知道這是否可能作爲單線程。
不知何故,我沒有看到。我可以發誓我讀了grep的整個手冊頁。技術上解決了我的問題,但我仍然在做錯事。將Z作爲開關添加到grep將刪除文件之間的新行。但是,當我將-0添加到我的perl命令時,它不能正確識別文件分隔符。它現在抱怨它無法找到(例如)file1.txtfile2.txtfile3.txt,這是目錄中的前三個文件。 – user1207446 2012-02-13 20:20:48
繼續我自己的評論,它使用-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