我有一个包含以下内容的脚本:
RHEL7.5> cat myScript.sh
...
awk -F":" '/^(EASYDOC)+/ {print $2}' /etc/oratab
...
RHEL7.5>
我要寻找的是用命令行参数($ 1)替换“ EASYDOC”一词,以便执行为“ myScript.sh EASYDOC”,而lettin EASYDOC替换awk行的模式变量引用。 >
例如:
awk -F":" '/^(something lets recognize $1 as arg)+/ {print $2}' /etc/oratab
将是可取的。 提前致谢。内斯托。
答案 0 :(得分:2)
首先,要将shell变量传递到awk脚本中,请使用-v
:
awk -F":" -v arg="$1" ...
第二,除了字符串常量之外,您将无法对其他任何表达式使用正则表达式/.../
语法,因此请将~
运算符与$0
一起使用:
awk -F":" -v arg="$1" '$0 ~ "^(something lets recognize " arg " as arg)+" { print $2 }'
例如:
$ var=foo
$ cat file
something lets recognize foo as arg:shut the door:the color is red
$ awk -F":" -v arg=$var '$0 ~ "^(something lets recognize " arg " as arg)+" { print $2 }' file
shut the door