다음 명령을 실행하려고 할 때(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
옵션으로 간주됩니까? 이 명령이 제대로 작동하지 않는 이유는 무엇입니까?
누구든지 의견이 있으면 알려주세요.
감사해요
답변1
/
명령 에 대한 구분 기호 로 사용되는 경우 패턴 및 대체에서 이스케이프되어야 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]}