Awk - 未端接的正则表达式

Ban*_*Orc 0 bash awk sh

我正在编写一个shell脚本,需要从文本文件中提取值,如下所示:

app.full.name /warfilelocation/ warfilename
Run Code Online (Sandbox Code Playgroud)

我的shell脚本将遍历应用程序名称列表,并使用AWK提取位置或名称.我已使用以下命令在命令行上测试过:awk"\ $ 1~/app.full.name/{print $ 2}"applications.txt

返回我期望的东西然而当我把它放在一个shell脚本中我开始有问题.

我有一个看起来像这样的函数:

function get_location() {
        local application=$1
        awk "\$1 ~/^$application/ { print \$2 }"  applications.txt 
}
Run Code Online (Sandbox Code Playgroud)

但是,当我调用此函数时,我收到以下错误:

awk: $1 ~/^app.full.name
awk:      ^ unterminated regexp
awk: cmd. line:1: app.full.name
awk: cmd. line:1:         ^ syntax error
awk: cmd. line:2: app.full.name/ { print $2 }
awk: cmd. line:2:    ^ syntax error
Run Code Online (Sandbox Code Playgroud)

有没有人有任何想法我在这里做错了什么.我认为我没有逃避变量的正确,但无论我尝试它似乎都不起作用.

提前致谢

Fre*_*ihl 6

使用此方法使awk识别shell变量:

awk -v "v1=$VAR1" -v "v2=$VAR2" '{print v1, v2}' input_file
Run Code Online (Sandbox Code Playgroud)

更新

$ cat input
tinky-winky
dipsy
laa-laa
noo-noo
po

$ teletubby='po'

$ awk -v "regexp=$teletubby" '$0 ~ regexp' input
po
Run Code Online (Sandbox Code Playgroud)

请注意,任何东西都可以进入shell变量,即使是完整的正则表达式,例如^d.*y.只需确保使用单引号来防止shell进行任何扩展.