V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Chuizi997
V2EX  ›  Linux

awk 的 pattern 在 shell 脚本中如何调用位置参数?

  •  
  •   Chuizi997 · 2021-02-13 18:30:59 +08:00 · 1375 次点击
    这是一个创建于 1161 天前的主题,其中的信息可能已经有所发展或是发生改变。

    就是希望在执行脚本时传递一个 $1 作为脚本中 awk 的 pattern

    awk '/$1/{print}' #
    

    如何实现这样的效果 $1 被理解成位置参数,而不是第一列

    5 条回复    2021-02-14 04:03:40 +08:00
    hcymk2
        1
    hcymk2  
       2021-02-13 18:58:09 +08:00
    -v var=val --assign=var=val
    zlowly
        2
    zlowly  
       2021-02-13 18:58:55 +08:00
    不是很理解你说的“ $1 被理解成位置参数”是什么意思,是指$1 为调用 awk 的 shell 脚本的参数吗?
    如果是,那么你可以用-v 传递变量进 awk 然后再利用。例如
    awk -v mypattern="$1" '$0 ~ mypattern {print}'
    这样就把$1 赋值到 awk 里的变量 mypattern,而这个 mypattern 变量就可以用~来进行匹配运算。
    churchmice
        3
    churchmice  
       2021-02-13 19:00:59 +08:00   ❤️ 1
    awk "/$1/{print}" #

    换成"",首先 shell 会帮你做替换,替换完了才会给 sed
    churchmice
        4
    churchmice  
       2021-02-13 19:03:14 +08:00
    可以继续扩展,比如你想要 echo 出一个 '""'怎么做?
    "" ''只是 shell 用来定界用的,想明白了这一点,你可以随便传你想要的


    echo "'"'""'"'"
    IgniteWhite
        5
    IgniteWhite  
       2021-02-14 04:03:40 +08:00 via iPhone
    @churchmice 对头。

    另外补充 bash 和 zsh 对单双引号的处理不一样,不知道其他的 shell 的处理都是什么样的。我一般会向 bash 看齐,写在 shebang 行。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2795 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 05:53 · PVG 13:53 · LAX 22:53 · JFK 01:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.