Shell-Script

如何正確設置 sed 命令

  • January 19, 2021

當我嘗試以下命令時,(我想重寫 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]}

引用自:https://unix.stackexchange.com/questions/629809