Это потому, что обнаженная '
в вашей замещающей строке фактически завершает команду sed
, то есть оболочка пытается обработать строку.Это на самом деле сразу стало очевидным, когда редактирование Бенуа заставило ваш вопрос правильно выбрать синтаксис.Вы можете видеть, что второй '
в строке (первый символ текста замещения) изменил цвет с красного на черный из-за завершения строки.
Кроме того, sed
не понравитсяиспользование naked []
, поскольку они указывают классы символов в регулярных выражениях.
Вы можете исправить обе проблемы с помощью:
pax> find input.txt -exec sed 's/{a\[$1\]=a\[$1\]FS$2}END{for(i in a) print i,a\[i\]}/\x27{a[$1]=a[$1]FS$2}END{for(i in a) print i,a[i]}\x27/g' {} \;
, который выдает:
'{a[$1]=a[$1]FS$2}END{for(i in a) print i,a[i]}'
Такв основном, избегайте квадратных скобок в строке поиска, чтобы они рассматривались как литералы, и используйте \x27
в строке замены вместо '
.