我有一个名为 input.txt 的文件,其中包含以下内容:
...
文件“Edie - Realities.txt”TXT
...
我想读取它,然后从以 FILE 开头的行中删除文件名路径,并检查它是否存在,因此:
[ -f $(cat input.txt | grep FILE | grep -o "\".*\"") ] && echo "exist" || echo "does not exist"
但这输出:
[: too many arguments
does not exist
Run Code Online (Sandbox Code Playgroud)
如果我运行:
echo $(cat input.txt | grep FILE | grep -o "\".*\"")
Run Code Online (Sandbox Code Playgroud)
我得到了我的期望:
"Edie - Realities.txt"
Run Code Online (Sandbox Code Playgroud)
那么为什么会这样,或者我该如何解决这个问题?
您需要将参数引用到-f
-- 如果您运行,set -x
您会看到正在执行的命令是[ -f '"Edie' '-' 'Realities.txt"' ]
参数太多。
[ -f "$(sed -e '/FILE/!d' -e 's/FILE "\([^"]*\).*/\1/' input.txt)" ]
Run Code Online (Sandbox Code Playgroud)
如果您的系统上有 GNU grep,您可以使用:
[ -f "$(grep -Po '(?<=FILE ").*(?=")' input.txt)" ]
Run Code Online (Sandbox Code Playgroud)