我正在尝试通过传递两个将用于替换的变量来用 AWK 进行替换。
我最初的尝试是:
FILE=a
cat $FILE | awk -v var1="$Linea_SF" -v var2="$Linea_EF" '{gsub(/var1/,"var2");}1'
文件a的内容为:
H224:N3-H224:N3H
这些变量包括:
Linea_SF=H224:N3-H224:N3H
Linea_EF=H224:N3-S105:O4H
但是,它并没有实现预期的替代。
Why?
还有其他方法可以做到吗?比如 sed 还是其他什么?
答案1
它不起作用,因为/var1/
和"var2"
分别是正则表达式常量和一个字符串字面量。
您可以使用的值var1
作为动态正则表达式或者计算正则表达式并将的值var2
作为替换字符串gsub(var1,var2)
,即
$ awk -v var1="$Linea_SF" -v var2="$Linea_EF" '{gsub(var1,var2);}1' "$FILE"
H224:N3-S105:O4H
cat ... |
(由于awk
可以直接读取文件,所以不需要)。