2010-11-06 50 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