在 awk 命令中使用组合正则表达式变量

Use composed regular expression variable in awk command

我正在尝试在 awk 命令中使用正则表达式,这个正则表达式应该是一个变量,我可以在调用 awk 命令之前更改它

示例: gawk 'BEGIN{RS=ORS="\n\n" {s=tolower([=10=])} s~/word1|word2/' file1.log

这对我有用,这个命令打印所有包含 words1 或 word2 的行,从上一个 "new line" 到下一个 "new line"

我想做的是,将word1和word2放在一个变量中,然后在gawk中使用

例如:

正则表达式="word1|word2" gawk 'BEGIN{RS=ORS="\n\n" {s=tolower([=11=])} s~/$regex/' file1.log

可以更改正则表达式的位置取决于我的程序 我搜索并尝试了很多解决方案,但没有一个对我有用

我尝试过的解决方案:

1) 正则表达式="word1|word2"; gawk 'BEGIN{RS=ORS="\n\n" {s=tolower([=11=])} s~/$regex/' file1.log

2) 正则表达式="word1|word2" gawk -v pat="$regex" 'BEGIN{RS=ORS="\n\n" {s=tolower([=13=])} s~/pat/' file1.log

3) 正则表达式="word1|word2" gawk 'BEGIN{RS=ORS="\n\n" {s=tolower([=14=])} {pat=$regex} s~/pat/' file1.log

4) 正则表达式="word1|word2" echo $regex | gawk 'BEGIN{RS=ORS="\n\n" {s=tolower([=15=])} s~//' file1.log

提前致谢!

能否尝试关注一下,如果对您有帮助,请告诉我。

如果您想将两个字符串保存在一个变量中并想在 awk 中用作正则表达式,那么以下内容也可能对您有所帮助。

regex='word1|word2'
awk -v reg="$regex" 'tolower([=10=]) ~ reg' Input_file

这里也有几点:

我- 因为你没有提供任何数据 Input_file 样本所以无法测试它但我的直觉是它应该有效。

II- 然后你在 awk 的 BEGIN 部​​分提到了 RSORS\n,这是多余的,因为默认情况下它们本身被设置为新的行,以便您可以从代码中删除该部分。

如果你想把它作为复合表达式输入,我猜你也可以这样做:

awk -v pat="$regex" '{split(regex, a, "|")}tolower([=10=]) ~ a[1] || tolower([=10=]) ~ a[2]'

假设您的正则表达式输入:regex="word1|word2"