使用AWK gensub()函数替换多个(但不是全部)模式的出现

时间:2012-12-16 12:11:29

标签: awk

此示例删除第五次出现的正则表达式:

printf "%s " $(seq 9) | gawk '{ print gensub(/[0-9]/,"","5") }'
1 2 3 4  6 7 8 9 

此示例删除正则表达式的第六个实例:

printf "%s " $(seq 9) | gawk '{ print gensub(/[0-9]/,"","6") }'
1 2 3 4 5  7 8 9 

可以将上面的例子保存在一个中吗? 我尝试过,但它不起作用:

printf "%s " $(seq 9) | gawk '{ print gensub(/[0-9]/,"","5|6") }'
 2 3 4 5 6 7 8 9 

我想要打印:

1 2 3 4    7 8 9

1 个答案:

答案 0 :(得分:2)

根据documentation,我能想到的其中一种方式:

printf "%s " $(seq 9) | gawk 'END{ print gensub(/[0-9]/,"","5",gensub(/[0-9]/,"","5")) }'

另一种方式(通过您非常具体的输入):

printf "%s " $(seq 9) | gawk 'END { print gensub(/[0-9] [0-9]/,"","3") }'
  

在目标字符串目标中搜索正则表达式的匹配项   正则表达式。如果 是一个以'g'或'G'开头的字符串(缩写为   “global”),然后替换regexp的所有匹配项。   否则,如何将其视为表示正则表达式匹配的数字   替换。如果没有提供目标,请使用$ 0。它返回修改后的   string作为函数和原始目标字符串的结果   没有改变。