GAWK的gensub()中的“替换”参数的类型是什么?

时间:2016-01-08 03:42:52

标签: regex awk gawk

The prototype of the function gensub() in GAWK

gensub(regexp, replacement, how [, target]) 
  1. 根据我在例子中的观察,

    • regexp是用斜杠
    • 括起来的正则表达式
    • 我在示例中看到,replacement提供了带引号的字符串(请参阅下面的示例)。

      但是它可以包含对匹配子字符串中的组的反向引用(参见下面的示例),这似乎是 我认为replacement的类型是正则表达式,并且提供给replacement的引用字符串被强制转换为正则表达式。

      现在我 confused:replacement的类型,字符串或常规字符串 表达

  2. 我可以将斜杠括起来的正则表达式赋予 replacement

    ,例如,来自同一链接:

    $ gawk '
    > BEGIN {
    >      a = "abc def"
    >      b = gensub(/(.+) (.+)/, "\\2 \\1", "g", a)
    >      print b
    > }'
    -| def abc
    

    我可以将b = gensub(/(.+) (.+)/, "\\2 \\1", "g", a)替换为b = gensub(/(.+) (.+)/, /\2 \1/, "g", a)吗?

    顺便问一下,-| def abc是什么意思?

1 个答案:

答案 0 :(得分:1)

主要是,replacement是一个字符串,其中包含一组有限的元字符。

如果使用正则表达式作为替换编译,则可以接受;我不想讨论它的作用。

-| def abc主要只是前面(说明性)命令的输出。 -|的作用在typographical conventions中解释为标志输出的字形标记输出;大多数其他示例输出在输出之前具有该标记。无论如何,它不是awk命令的一部分。 awk命令会生成def abc

  

特别对待哪些角色?

手册说(gensub()):

  

这是通过在正则表达式中使用括号来标记组件然后在替换文本中指定'\ N'来完成的,其中N是从1到9的数字。

它还提到“超过subgsub提供的内容”,所以查看gsub(),它说:

  

sub()一样,字符'&'和'\'是特殊的

sub()说:

  

如果替换中出现特殊字符'&',则表示由regexp匹配的精确子字符串。 ...可以通过在字符串中添加反斜杠来关闭此特殊字符('&')的效果。像往常一样,要在字符串中插入一个反斜杠,必须编写两个反斜杠。因此,在字符串常量中写'\&'以在替换中包含文字'&'。