在bash命令行输出中转义空格

3

我想要输出一个文件列表,并将其传递给另一个命令,但需要对空格进行转义。我已经做到了这一步:

find ./ | grep ".mkv$" | awk '{ print "\"" $0 "\"" }'

这将输出类似以下内容:

"/dir/File One.mkv"
"/dir/File Two.mkv"
"/File Three blah blah.mkv"

但我需要它输出:
"/dir/File\ One.mkv"
"/dir/File\ Two.mkv"
"/File\ Three\ blah\ blah.mkv"

有没有一个简单的命令/正则表达式可以添加到我的命令中?

尝试使用find ./ | grep ".mkv$" | awk '{ print "\"" $0 "\"" }' | sed 's/ /\\ /g' - amdixon
没错,可以运行,谢谢 :D ... 作为答案发布 :D - Just Lucky Really
你可以这样结合使用 findgrepfind . -name \*.mkv | awk ... - dave
2个回答

3

使用sed替换空格前的某些反斜杠

命令

find ./ | grep ".mkv$" | awk '{ print "\"" $0 "\"" }' | sed 's/ /\\ /g'

输出

"./dir/File\ Two.mkv"
"./dir/File\ One.mkv"
"./File\ Three\ blah\ blah.mkv"

2

在这里,你不需要使用 grepawk等工具。只需使用 -name 参数查找你想要的文件,如果需要,可以使用 sed 转义空格:

find . -name '*.mkv' -printf "'%p'\n" | sed 's/[[:space:]]/\\&/g'
'./dir/File\ One.mkv'
'./dir/File\ Two.mkv'
'./File\ Three\ blah\ blah.mkv'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接