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

2021-02-13 18:30:59 +08:00
 Chuizi997

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

awk '/$1/{print}' #

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

1395 次点击
所在节点    Linux
5 条回复
hcymk2
2021-02-13 18:58:09 +08:00
-v var=val --assign=var=val
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
2021-02-13 19:00:59 +08:00
awk "/$1/{print}" #

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


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

另外补充 bash 和 zsh 对单双引号的处理不一样,不知道其他的 shell 的处理都是什么样的。我一般会向 bash 看齐,写在 shebang 行。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/753196

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX