次の内容を含む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
私が実行した場合:
echo $(cat input.txt | grep FILE | grep -o "\".*\"")
私は私が期待したものを得ます:
"Edie - Realities.txt"
それでは、なぜこれが起こり、どのように解決できますか?
ベストアンサー1
引数を引用する必要があります-f
。実行すると、set -x
実行中のコマンドに[ -f '"Edie' '-' 'Realities.txt"' ]
引数が多すぎることがわかります。
[ -f "$(sed -e '/FILE/!d' -e 's/FILE "\([^"]*\).*/\1/' input.txt)" ]
システムにGNU grepがある場合は、次のものを使用できます。
[ -f "$(grep -Po '(?<=FILE ").*(?=")' input.txt)" ]