在 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 部分提到了 RS
和 ORS
到 \n
,这是多余的,因为默认情况下它们本身被设置为新的行,以便您可以从代码中删除该部分。
如果你想把它作为复合表达式输入,我猜你也可以这样做:
awk -v pat="$regex" '{split(regex, a, "|")}tolower([=10=]) ~ a[1] || tolower([=10=]) ~ a[2]'
假设您的正则表达式输入:regex="word1|word2"
我正在尝试在 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 部分提到了 RS
和 ORS
到 \n
,这是多余的,因为默认情况下它们本身被设置为新的行,以便您可以从代码中删除该部分。
如果你想把它作为复合表达式输入,我猜你也可以这样做:
awk -v pat="$regex" '{split(regex, a, "|")}tolower([=10=]) ~ a[1] || tolower([=10=]) ~ a[2]'
假设您的正则表达式输入:regex="word1|word2"