我正在尝试在unix shell脚本中使用AWK来替换文件中的一个模式的实例,并将其输出到新文件。
具体来说,如果文件名是MYFILE.pc,那么我正在寻找'* MYFILE'和'g_MYFILE'(没有引号)的实例。为此,我在AWK中使用gsub
函数。
我已成功写出输出文件并根据需要更换了所有实例,但是,该脚本还将'MYFILE'(即没有星号)的实例替换为'g_MYFILE'
这是脚本:
awk -v MODNAM=${OUTPUT_FILE%.pc} '
{
gsub("\*"MODNAM, "g_" MODNAM);
print
}' ${INPUT_FILE} > ${FULL_OUTPUT_FILENAME}
澄清脚本执行以下转换:
我只想要进行第一次转换。有没有人有任何建议?
答案 0 :(得分:2)
您可能需要双倍转义*
,因为您使用动态正则表达式而不是正则表达式常量作为gsub
的第一个参数。有关详细信息,请参阅section 3.8 of the GAWK manual。
awk -v MODNAM=${OUTPUT_FILE%.pc} '
{
gsub("\\*"MODNAM, "g_" MODNAM);
print
}' ${INPUT_FILE} > ${FULL_OUTPUT_FILENAME}
答案 1 :(得分:1)
您的代码实际上可以在我的mawk 1.3.3和zsh shell中使用。这可能是一个shell转义问题 - 您是否尝试将awk脚本写入文件并通过-f
调用它?
答案 2 :(得分:1)
对于简单的替换,根本不需要awk。尝试:
/home/sirch> file="*a*a*a"
/home/sirch> echo ${file//\*/g_}
g_ag_ag_a