我试图在awk命令中使用正则表达式,其中这个正则表达式应该是一个变量,我可以在调用awk命令之前更改它
实施例:
gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/word1|word2/' file1.log
这对我有用,这个命令打印所有行包含来自last" new line"中的words1或word2;到下一个"新线"
我想要做的是,将word1和word2放在变量中并在gawk中使用
例如:
正则表达式=" WORD1 | WORD2"
gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/$regex/' file1.log
可以更改正则表达式取决于我的程序 我搜索并尝试了许多解决方案,但没有任何方法可以帮助我
我试过的解决方案:
1)regex =" word1 | word2&#34 ;;
gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/$regex/' file1.log
2)regex =" word1 | word2"
gawk -v pat="$regex" 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/pat/' file1.log
3)regex =" word1 | word2"
gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} {pat=$regex} s~/pat/' file1.log
4)regex =" word1 | word2"
echo $regex | gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/$1/' file1.log
提前致谢!
答案 0 :(得分:3)
请您试着跟随并告诉我这是否对您有帮助。
如果你想将两个字符串保存在一个变量中,并希望在awk中用作正则表达式,那么下面的内容也可以帮助你。
regex='word1|word2'
awk -v reg="$regex" 'tolower($0) ~ reg' Input_file
这里也有几点:
I-因为你没有提供任何数据Input_file样本所以无法测试它,但我的直觉是它应该工作。
II-然后你在RS
的BEGIN部分提到ORS
和\n
到awk
,这是多余的,因为默认情况下它们被设置为新行所以你可以从代码中删除那部分。
答案 1 :(得分:0)
如果你想把它作为复合表达式输入,我猜你也可以这样做:
awk -v pat="$regex" '{split(regex, a, "|")}tolower($0) ~ a[1] || tolower($0) ~ a[2]'
假设您的正则表达式输入为:regex="word1|word2"