У меня странное поведение в сценарии bash, который я не понимаю.Bash escape-скрипт & группа захвата sed
В основном в коде ниже я пытаюсь избежать мета-символы ...
while IFS=, read _type _content; do
if [ -z "$patternfilter" ]; then
if [ "$_type" == "rex" ]; then
patternfilter="$_content"
elif [ "$_type" == "txt" ]; then
patternfilter="`echo "$_content" | sed -re 's/([-^[{}()*+/.,;?$|#\\])/\\\1/g' -e 's/]/\\]/g'`"
fi
else
if [ "$_type" == "rex" ]; then
patternfilter="$patternfilter|$_content"
elif [ "$_type" == "txt" ]; then
patternfilter="$patternfilter|`echo "$_content" | sed -re 's/([-^[{}()*+/.,;?$|#\\])/\\\1/g' -e 's/]/\\]/g'`"
fi
fi
done < $patternfile
outpout дать мне следующее:
blabal \ 1bla \ 1blabla \ 1toto \ 1com
Вместо:
blabal \ (бла \) блабла \ [тото \] \. Ком
Если я вхожу непосредственно в консоли код он работает ... Я что-то пропустил, но я не знаю, что.
[root]# patternfilter="blabal(bla)blabla[toto].com"
[root]# echo "$patternfilter" | sed -re 's/([-^[{}()*+/.,;?$|#\\])/\\\1/g' -e 's/]/\\]/g'
blabal\(bla\)blabla\[toto\]\.com
Обратите внимание, что без чтения '-r' будут интерпретировать обратную косую черту. Попробуйте это с помощью 'a \ tb' с и без' -r'. –
@EdMorton В ответе '(и всегда использовать -r для чтения -r)' предлагает это. :) – jm666
А я пропустил это. Почему бы не использовать его в своем скрипте, вместо того чтобы не использовать его, но заявив, что всегда его используете? –