awk 解析错误 '<'操作员

发布于 2024-09-30 21:09:11 字数 310 浏览 4 评论 0 原文

我正在尝试在 .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

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

I'm trying to make an alias in .alias file for tcsh.
Alias is something like this :

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

When i try to run the alias it give me following error :

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

Any idea why this would happen ?
Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

与酒说心事 2024-10-07 21:09:11

尝试一下。您需要转义单引号并且不要使用任何双引号。

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

Give this a try. You need to escape the single quotes and don't use any double quotes.

alias do 'grep -iE '\''pattern'\'' filename | awk '\''{if ( $2 < 0 ) print}'\'''
白芷 2024-10-07 21:09:11

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

$ 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 之前,它就被 shell 吃掉了。试试这个:

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

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

Well, to start with the command line you provide is gibberish:

$ alias do "grep -iE '' | awk '{if($2 < 0)print}'"
bash: alias: do: not found
bash: alias: grep -iE '' | awk '{if( < 0)print}': not found

If I correct it to what I think you mean, I see this:

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

And with this we can see why you're getting a parse error. The $2 is being eaten by the shell before awk ever sees it. Try this instead:

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

My guess is that at this point you won't be getting your parse errors any longer. (I can't speak for the rest of this, naturally, since I don't know what you're using as input.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文