如何在bash中用引号括起输出行?

如何在bash中用引号括起输出行?,bash,command-line,Bash,Command Line,本质上,我希望在中执行反向操作 我正在运行搜索,查找具有Windows行结尾(\r\n)的文件 $grep-URl^M。 某些返回文件的名称中有空格: /文件名1.txt /文件名2.txt 为了通过xargs将其传递给另一个工具,我需要引用以下行。如何转换为此输出: “/file name 1.txt” “/文件名2.txt” BSDgrep提供了一个--null选项,用于打印后跟空字节(而不是换行符)的名称 GNUgrep提供了一个具有相同语义的-Z或-null选项 BSD和GNUxar

本质上,我希望在中执行反向操作

我正在运行搜索,查找具有Windows行结尾(
\r\n
)的文件

$grep-URl^M。
某些返回文件的名称中有空格:

/文件名1.txt
/文件名2.txt
为了通过
xargs
将其传递给另一个工具,我需要引用以下行。如何转换为此输出:

“/file name 1.txt”
“/文件名2.txt”

BSD
grep
提供了一个
--null
选项,用于打印后跟空字节(而不是换行符)的名称

GNU
grep
提供了一个具有相同语义的
-Z
-null
选项

BSD和GNU
xargs
都使用
-0
选项来指示文件名由空字节分隔

因此:

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

为了避免空格问题,我将使用新行字符作为带-d选项的xargs的分隔符:

xargs -d '\n' ...
因此,我的解决方案是:

grep -URl ^M . | xargs -d '\n' rm

在这个特定的情况下,这个可能的副本可以很好地工作,因为它避免了中间引用的表示。我仍然很好奇您是如何生成这样一个带引号的表单的。请注意,
xargs
不会注意名称中的引号,除非您使用
-0
,否则将在空白处拆分。如果您希望在
中为$(grep-URl…
类型构造中的文件使用输出,那么您必须努力工作。当文件名中的空格被避免为错误,并通过重命名文件(比如,早在80年代)来修复时,生活就容易多了。您可能希望使用单引号而不是双引号,否则您可能会遇到文件名中嵌入的
$(…)
等符号的问题。文件名中的换行符也有点问题。