Shell-Script
如何正確設置 sed 命令
當我嘗試以下命令時,(我想重寫 sql)。
Day='2020/12/1' Dir=/home/test/data sql=`cat $Dir"/"$test".sql" | sed -e "s/Day/$Day/g"`
我遇到了以下錯誤。
sed: -e expression #1, char 24: unknown option to `s'
為什麼
s
被辨識為選項?為什麼這個命令不能正常工作?如果有人有意見,請告訴我
謝謝
如果您
/
用作命令的分隔符s/pattern/replacement/flags
sed
,那麼您需要/
在模式和替換中轉義。最好使用模式中既不出現也不替換的分隔符:Day='2020/12/1' Dir=/home/test/data sql=$(sed "s|Day|$Day|g" < "$Dir/$test.sql")
由於您正在標記
zsh
,您還可以執行以下操作:sql=${"$(<$Dir/$test.sql)"//Day/$Day}
然後,您不必擔心此類問題,也不必擔心字節在區域設置中不形成有效字元。
對於多個替換:
typeset -A replace=( Day "$Day" Month "$Month" Year "$Year" '*' Star ) pattern="(${(j[|])${(kb@)replace}})" set -o extendedglob sql=${"$(<$Dir/$test.sql)"//(#m)$~pattern/$replace[$MATCH]}