У вас есть дополнительные обратные слеши, чтобы избежать специальных символов. Пожалуйста, попробуйте:
# find . -type f -name "gnuplot_RTre_*.gnplt" -exec sed -i 's/set xrange \[0:20]/set xrange \[0:3]/g' {} +
# The backslash in the REPLACEMENT above is unnecessary, although harmless.
# Please adopt the following instead.
find . -type f -name "gnuplot_RTre_*.gnplt" -exec sed -i 's/set xrange \[0:20]/set xrange [0:3]/g' {} +
В sed
символы $.*[\^
необходимо экранировать с помощью обратной косой черты, чтобы их считали буквальными.
[EDIT]
Правая квадратная скобка "]"
обычно не является специальным символом в регулярном выражении и
вам не нужно забрасывать это:
echo "[abc]" | sed 's/]/*/g'
=> [abc*
Но "]"
ведет себя как метасимвол, если ему предшествует неэкранированная левая квадратная скобка "["
для составления character class
.
echo "[abc]abc" | sed 's/[abc]/*/g'
=> [***]***
Чтобы сделать "["
буквальным, нам нужно избежать его.
echo "[abc]abc" | sed 's/\[abc]/*/g'
=> *abc
"]"
также можно экранировать только для визуальной симметрии.
echo "[abc]abc" | sed 's/\[abc\]/*/g'
=> *abc