在awk
中,和函数的第一个参数、sub()
函数gsub()
的第二个参数match()
和可选的第三个参数split()
是一个扩展的正则表达式。
这样的参数可以是任意表达式,其计算结果为被解释为正则表达式的字符串,也可以是正则表达式常量。
在中,为一些正则表达式(文法中的“token” )awk
写了一个正则表达式常量。/RE/
RE
ERE
awk
问题:假设它RE
保持不变(一些非变量正则表达式),在调用using/RE/
和 using "RE"
(语法中的“STRING
标记” )之间是否存在任何实际差异,例如?或者:是否有任何已知的实现在对上述函数的调用中这两种表示正则表达式的方式之间有所不同?awk
sub()
awk
问的原因是我记得必须修改一些awk
代码,这些代码试图在对or"RE"
的调用中用作正则表达式,因为无论出于何种原因,手头的实现都做了错误的事情,除非我用 调用函数。sub()
gsub()
awk
/RE/
不幸的是,这是一段时间以前(2 年多)所以我不记得细节,我什至不确定我当时使用的是什么 Unix(可能是 OpenBSD),但从那以后我一直想问这个问题。
是的,它们在所有 awk 实现中都不同,因为反斜杠用作转义符。有关此内容和更多详细信息,请参阅https://www.gnu.org/software/gawk/manual/gawk.html#Computed-Regexps :
因此,在编写正则表达式时,唯一考虑使用
"RE"
instead of 的时间/RE/
是:/
s 并且没有转义符,因此您可以编写,例如,sub("/foo/bar","")
而sub(/\/foo\/bar/,"")
不仅仅是为了简洁,或者var=17; sub("stuff" var,"")
否则始终在正则表达式
/
周围使用正则表达式分隔符 (),而不是字符串分隔符 ("
)。