在正则表达式中使用变量
Using a variable in a regular expression
我正在使用一些 sub(), gsub()
函数来替换存储在变量中的内容。
比如说:
$ awk 'BEGIN {str="hello bee"; patt="llo"; gsub(patt,"XX",str); print str}'
heXX bee
这会将 str
中包含的字符串中所有出现的 llo
替换为 XX
。不错
现在说我想使用一个更复杂的正则表达式,它同时使用变量和模式。例如,"he"
+ 变量 patt
。我该怎么做?
如果我尝试使用 gsub(/he/patt, ...)
它不起作用:
awk 'BEGIN {str="hello bee"; patt="llo"; gsub(/he/patt,"XX",str); print str}'
Returns
hello bee
而不是
XX bee
这会起作用
awk 'BEGIN {str="hello bee"; patt="llo"; gsub(patt,"XX",str); print str}'
heXX bee
本质上,您必须将整个模式定义为一个变量,而不是它的一部分。
你可以这样做:
awk 'BEGIN {str="hello bee"; patt="llo"; gsub("he" patt,"XX",str); print str}'
XX bee
/he/patt
不会将字符串连接在一起,但 "he" patt
会。
那时您需要字符串连接,因此必须使用字符串定界符而不是正则表达式的正则表达式定界符:
$ awk 'BEGIN {str="hello bee"; patt="llo"; gsub("he"patt,"XX",str); print str}'
XX bee
请注意,您随后需要将所有转义字符加倍,因为 awk 必须先将字符串转换为正则表达式,这样会用完其中一个转义字符。
我正在使用一些 sub(), gsub()
函数来替换存储在变量中的内容。
比如说:
$ awk 'BEGIN {str="hello bee"; patt="llo"; gsub(patt,"XX",str); print str}'
heXX bee
这会将 str
中包含的字符串中所有出现的 llo
替换为 XX
。不错
现在说我想使用一个更复杂的正则表达式,它同时使用变量和模式。例如,"he"
+ 变量 patt
。我该怎么做?
如果我尝试使用 gsub(/he/patt, ...)
它不起作用:
awk 'BEGIN {str="hello bee"; patt="llo"; gsub(/he/patt,"XX",str); print str}'
Returns
hello bee
而不是
XX bee
这会起作用
awk 'BEGIN {str="hello bee"; patt="llo"; gsub(patt,"XX",str); print str}'
heXX bee
本质上,您必须将整个模式定义为一个变量,而不是它的一部分。
你可以这样做:
awk 'BEGIN {str="hello bee"; patt="llo"; gsub("he" patt,"XX",str); print str}'
XX bee
/he/patt
不会将字符串连接在一起,但 "he" patt
会。
那时您需要字符串连接,因此必须使用字符串定界符而不是正则表达式的正则表达式定界符:
$ awk 'BEGIN {str="hello bee"; patt="llo"; gsub("he"patt,"XX",str); print str}'
XX bee
请注意,您随后需要将所有转义字符加倍,因为 awk 必须先将字符串转换为正则表达式,这样会用完其中一个转义字符。