Ну, чтобы начать с командной строки, которую вы предоставляете, это бред:
$ alias do "grep -iE '' | awk '{if($2 < 0)print}'"
bash: alias: do: not found
bash: alias: grep -iE '' | awk '{if( < 0)print}': not found
Если я исправлю это к тому, что, как мне кажется, вы имеете в виду, я увижу это:
$ alias do="grep -iE '' | awk '{if($2 < 0)print}'"
$ alias do
alias do='grep -iE '\'''\'' | awk '\''{if( < 0)print}'\'''
И с этим мы можем видеть, почему вы получаете ошибку разбора. Оболочка съедает 2 доллара до того, как awk
ее увидит. Попробуйте вместо этого:
$ alias do="grep -iE '' | awk '{if(\$2 < 0)print}'"
$ alias do
alias do='grep -iE '\'''\'' | awk '\''{if($2 < 0)print}'\'''
Я предполагаю, что в этот момент вы больше не будете получать ошибки синтаксического анализа. (Естественно, я не могу говорить об остальном, поскольку не знаю, что вы используете в качестве входных данных.)