V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Chuizi997
V2EX  ›  Linux

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

  •  
  •   Chuizi997 · Feb 13, 2021 · 2382 views
    This topic created in 1899 days ago, the information mentioned may be changed or developed.

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

    awk '/$1/{print}' #
    

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

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

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


    echo "'"'""'"'"
    FurN1
        5
    FurN1  
       Feb 14, 2021 via iPhone
    @churchmice 对头。

    另外补充 bash 和 zsh 对单双引号的处理不一样,不知道其他的 shell 的处理都是什么样的。我一般会向 bash 看齐,写在 shebang 行。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3798 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 04:39 · PVG 12:39 · LAX 21:39 · JFK 00:39
    ♥ Do have faith in what you're doing.