2014-01-18 36 views
1

本質上我想要在this question中執行相反的操作。如何在bash中將輸出行換成引號?

我正在運行搜索,查找具有Windows行結尾的文件(\r\n),因爲我想要remove them

$ grep -URl ^M . 

一些返回的文件有空格在其名稱:

./file name 1.txt 
./file name 2.txt 

爲了通過xargs上它傳遞給另一個工具,我需要引用的行。我怎樣才能改變這種輸出,而不是:

"./file name 1.txt" 
"./file name 2.txt" 
+0

可能重複的[xargs輸入涉及空格](http://stackoverflow.com/questions/16952744/xargs-input-involving-spaces) –

回答

6

BSD grep提供--null選項打印的名字,然後一個空字節(而不是換行)。

GNU grep提供了具有相同語義的-Z--null選項。

BSD和GNU xargs都採用-0選項來指示文件名由空字節分隔。

因此:

grep -URl --null ^M . | xargs -0 ... 
+2

這在這個特定的情況下很好地工作,因爲它避免了中間引用的表示。儘管如此,我仍然很好奇你會如何製作這樣的引用表格。 –

+0

請注意,'xargs'不會注意名稱中的引號,並會在空格處分割,除非使用'-0'。如果您正在尋求在$(grep -URl ...)類型構造的'for file中使用輸出,那麼您必須努力工作。當文件名中的空格被避免爲通過重命名文件(例如,在80年代)修復的錯誤時,生活變得更容易。您可能想要使用單引號而不是雙引號,否則可能會遇到嵌入文件名中的符號(如$(...))的問題。文件名中的換行符也有點問題。 –

1

爲了避免空間問題,我會使用新行字符作爲分隔符xargs的-d選項:

xargs -d '\n' ... 

所以我的解決辦法是:

grep -URl ^M . | xargs -d '\n' rm 
相關問題