1

我正在尝试在 .alias 文件中为 tcsh 创建一个别名。别名是这样的:

alias do "grep -iE '<pattern>' <file> | awk '{if($2 < 0)print}'"

当我尝试运行别名时,它给了我以下错误:

awk: cmd. line:1: {if( < 0.0) print}
awk: cmd. line:1:      ^ parse error

知道为什么会发生这种情况吗?谢谢。

4

2 回答 2

2

试试这个。您需要转义单引号并且不要使用任何双引号。

alias do 'grep -iE '\''pattern'\'' filename | awk '\''{if ( $2 < 0 ) print}'\'''
于 2010-11-06T05:17:04.937 回答
1

好吧,从您提供的命令行开始是胡言乱语:

$ 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}'\'''

有了这个,我们可以看到为什么你会得到一个解析错误。awk2 美元在看到它之前就被贝壳吃掉了。试试这个:

$ alias do="grep -iE '' | awk '{if(\$2 < 0)print}'"
$ alias do
alias do='grep -iE '\'''\'' | awk '\''{if($2 < 0)print}'\'''

我的猜测是,此时您将不会再遇到解析错误。(剩下的我自然不能说,因为我不知道你用什么作为输入。)

于 2010-11-06T05:05:28.220 回答