Более надежным регулярным выражением будет поиск echo
, за которым не следует -e
или off
в любом контексте: поскольку sed
не может выполнять обход в регулярном выражении, вам придется использовать perl
:
perl -pe 's/echo +(?!((-[A-Za-df-z]|--[a-z-]+) +)*(-e|off))/echo -e/'
Это также обрабатывает случай, который у вас может быть (например) echo -n -e
, где есть a -e
, но не сразу после echo
: вы нехочу закончить с echo -e -n -e
.Кроме того, если бы вы сказали (скажем) echo --version
, вы бы не захотели echo -e --version
.Вышеуказанное регулярное выражение заботится об этом.
INPUT
echo "\nE-MAILING TO INTERESTED PARTIES....\n"
set echo off
echo -e "\nE-MAILING TO INTERESTED PARTIES....\n"
echo -n -e "what happens if the -e is already there?"
echo --help # don't want echo -e --help
OUTPUT
echo -e"\nE-MAILING TO INTERESTED PARTIES....\n"
set echo off
echo -e "\nE-MAILING TO INTERESTED PARTIES....\n"
echo -n -e "what happens if the -e is already there?"
echo -e--help # don't want echo -e --help