如何在bash中用引号括起输出行?
本质上,我希望在中执行反向操作 我正在运行搜索,查找具有Windows行结尾(如何在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
\r\n
)的文件
$grep-URl^M。
某些返回文件的名称中有空格:
/文件名1.txt
/文件名2.txt
为了通过xargs
将其传递给另一个工具,我需要引用以下行。如何转换为此输出:
“/file name 1.txt”
“/文件名2.txt”
BSDgrep
提供了一个--null
选项,用于打印后跟空字节(而不是换行符)的名称
GNUgrep
提供了一个具有相同语义的-Z
或-null
选项
BSD和GNUxargs
都使用-0
选项来指示文件名由空字节分隔
因此:
grep -URl --null ^M . | xargs -0 ...
为了避免空格问题,我将使用新行字符作为带-d选项的xargs的分隔符:
xargs -d '\n' ...
因此,我的解决方案是:
grep -URl ^M . | xargs -d '\n' rm
在这个特定的情况下,这个可能的副本可以很好地工作,因为它避免了中间引用的表示。我仍然很好奇您是如何生成这样一个带引号的表单的。请注意,
xargs
不会注意名称中的引号,除非您使用-0
,否则将在空白处拆分。如果您希望在中为$(grep-URl…
类型构造中的文件使用输出,那么您必须努力工作。当文件名中的空格被避免为错误,并通过重命名文件(比如,早在80年代)来修复时,生活就容易多了。您可能希望使用单引号而不是双引号,否则您可能会遇到文件名中嵌入的$(…)
等符号的问题。文件名中的换行符也有点问题。