【问题标题】:Using awk in BASH alias or function在 BASH 别名或函数中使用 awk
【发布时间】:2011-11-06 20:32:11
【问题描述】:

我有一个命令可以在命令行中正常工作,但当我尝试将它放在别名或函数中时却不行。

$ awk '{print $1}' /tmp/textfile
0

没错,因为“0”在“文本文件”的位置 1。

$ alias a="awk '{print $1}' /tmp/textfile"
$ a
1 0 136 94

这是“文本文件”中的整行。我已经尝试了各种我能想象到的引号、括号和反引号。我可以以多种格式遇到相同的问题。

我不明白什么?

【问题讨论】:

    标签: bash awk


    【解决方案1】:

    使用函数代替别名

    myfunc(){ awk '{print $1}' file; }
    

    【讨论】:

    • 这当然是更灵活的解决方案,因为它允许引用参数向量。例如,如果您想使用"${1:-hardcoded_filename}" 来允许以显式默认值传递可选文件名,这将在此处有效,但不适用于别名方法。
    • 我认为这是使用 "awk" 而不是 "alias" 的最佳方式,因为当您需要使用多个 " 或 ' 时,使用别名开始变得复杂......例如:#不工作....alias gethaweblist='docker exec haproxy01 cat /usr/local/etc/haproxy/haproxy.cfg | grep acl | awk '{print $2 " --> " $7}''#好方法gethaweblist(){ docker exec haproxy01 cat /usr/local/etc/haproxy/haproxy.cfg | grep acl | awk '{print $2 " --> " $7}'; }
    【解决方案2】:

    你需要像这样转义$

     alias a="awk '{print \$1}' /tmp/textfile"
    

    否则你的别名是:

     awk '{print }' /tmp/textfile
    

    打印整个文件...

    【讨论】:

    • 在这些部分中表示感谢的协议是将答案标记为正确答案(通过单击左侧的小复选标记)。 =)
    • +1 如果我是这个问题的所有者,我很乐意将这个问题标记为答案。它解决了我遇到的类似问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多