在 awk 模式中更改正则表达式分隔符

6

是否可以将默认的正则表达式定界符(斜杠)更改为其他字符?

我尝试使用sed语法进行更改,但没有成功。

$ gawk '\|bash| { print } ' backup.sh
gawk: |bash| { print }
gawk: ^ syntax error

我正在尝试的正则表达式有许多斜杠。转义所有这些会使它变得丑陋和难以阅读。我尝试将 / 更改为 |,但没有起作用。
谢谢提前帮助。
1个回答

2
AWK不支持该功能。请使用变量代替。
gawk 'BEGIN {pattern = "/"} $0 ~ pattern {print}' backup.sh

我正在尝试使用这个示例来提取两个模式之间的行,例如 awk '/pat1/,/pat2/' foo.html -- 这些模式包含斜杠和双引号字符(是html代码)。你能否提供一个不需要转义斜杠和双引号的示例? - Jonathan Cross
@JonathanCross,如果不进行转义,这是不可能的。您可能需要创建一个新问题,展示您正在处理的具体问题。 - Dennis Williamson
谢谢。也许您可以展示如何使用2个变量来适应awk '/pat1/,/pat2/' foo.html,而不是使用/pat1//pat2/ -- 然后我就可以弄清楚转义了? - Jonathan Cross
1
@JonathanCross:awk 'BEGIN {var1 = "pat1"; var2 = "pat2"} $0 ~ var1, $0 ~ var2 {print}' filename 是一种方法。另一种方法是 awk -v var1='pat1' -v var2='pat2' '$0 ~ var1, $0 ~ var2 {print}' filename(它允许您传递 shell 变量以及所示的字符串/模式)。 - Dennis Williamson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接