我是shell腳本的新手。我想逐行讀取文件,其中包含參數,如果參數中包含任何空格,我想用引號括起來替換它。使用Shell腳本查找帶空格的字符串並用引號括起
例如,如果文件(TEST.DAT)包含,
-DtestArgument1=/path/to a/text file
-DtestArgument2=/path/to a/text file
解析上述文件後,shell腳本應符合以下
-DtestArgument1="/path/to a/text file" -DtestArgument2="/path/to a/text file"
這裏是我的shell腳本編寫串,
while read ARGUMENT; do
ARGUMENT=`echo ${ARGUMENT} | tr "\n" " "`
if [[ "${ARGUMENT}" =~ " " ]]; then
ARGUMENT=`echo $ARGUMENT | sed 's/\^(-D.*\)=(.*)/\1=\"\2\"/g'`
NEW_ARGUMENT="${NEW_ARGUMENT} ${ARGUMENT}"
else
echo "doesn't contains spaces"
NEW_ARGUMENT="${NEW_ARGUMENT} ${ARGUMENT}"
fi
done < test.dat
但它拋出以下錯誤:
sed: -e expression #1, char 28: Unmatched) or \)
該代碼應該與所有shell兼容。請幫助我。提前致謝。
+1;以防萬一它也會讓其他人感到困惑:'-d''與'-d'''相同;即:使用單個空格作爲分隔符(分隔符); 'paste -s -d \ -'因此將所有(stdin)輸入行與一個空格連接起來,形成一個單獨的,空間分隔的輸出行。 – mklement0
使用'-d \ -'的副作用是反斜槓後需要兩個空格;對許多人來說可能並不明顯。最好使用'-d''-'作爲@ mklement0的建議。 – devnull