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

时间:2015-10-11 04:42:26

标签: bash

所以我试图输出一个文件列表,这些文件将通过管道传输到另一个命令中,但需要对这些空间进行转义。我到目前为止:

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"

我可以添加一个简单的命令/正则表达式吗?

2 个答案:

答案 0 :(得分:2)

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

<强>命令

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

<强>输出

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

答案 1 :(得分: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'