2010-11-06 76 views
1

我想为tcsh在.alias文件中创建一个别名。 别名是这样的:在'<'运算符awk解析错误

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 

任何想法,为什么会发生这种情况? 谢谢。

回答

2

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

alias do 'grep -iE '\''pattern'\'' filename | awk '\''{if ($2 < 0) print}'\''' 
+0

这个工作....非常感谢.. – zobars 2010-11-06 21:02:41

+1

@zobars:一般认为礼貌接受最适合你的答案,并投票。 – 2010-11-07 03:22:21

+0

@JUST,我与你同在..sorry我在这里是新的,所以它花了我一段时间才弄清楚如何接受答案,我尝试过,但没有足够的声望upvote呢。 – zobars 2010-11-08 04:13:01

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

而与此我们可以看到为什么你得到一个解析错误。在awk有史以来看到$ 2正在被外壳吃掉。试试这个:

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

我的猜测是,在这一点上,你不会再得到你的分析错误。 (我不能说其余的这些,自然,因为我不知道你在用什么作为输入。)

+0

感谢您的回答。是的,我已经做出来了,因为真正的例子非常长。问题是我试图逃脱2美元,就像你建议,它仍然被外壳吃...问题是与2美元,我只是尝试和改变,如果($ 2 <0),如果($ <0),为了的测试,当我这样做$是不是吃,但$ 2是....任何想法?? – zobars 2010-11-06 05:13:11

+1

'='是Bash(和Bourne-family)的语法,你的一些引用可能取决于这些shell的特性。 OP使用'tcsh',它可能有一些不同的引用规则(并且在定义别名时不使用'='。) – 2010-11-06 05:19:52

+0

@Dennis:啊!我一开始并没有发现'tcsh'的事情。 。@zobars:无论问题是什么,它都与shell的引用规则有关,如果'tcsh'允许你看到像'bash'这样的文字存储值,看看'tcsh'实际上认为别名是什么 – 2010-11-06 05:47:50