2017-09-24 87 views
-2

我想在awk命令,在这个正则表达式应该是一个变量使用正则表达式,我可以调用awk命令使用由正则表达式变量

实例之前进行更改: gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/word1|word2/' file1.log

这个工作对我来说,这个命令显示所有行包含最后的“新行”到下一个“新行”

我想要做的就是words1或字词2,把字词1和字词2在变量中,在gawk中使用它

例如:

正则表达式=“字词1 |单词2” gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/$regex/' file1.log

其中正则表达式可以改变取决于我的程序 我搜索并尝试了多种解决方案,但没有工作对我来说

解决方案我尝试过:

1)regex =“word1 | word2”; gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/$regex/' file1.log

2)的正则表达式= “字词1 | WORD2” gawk -v pat="$regex" 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/pat/' file1.log

3)的正则表达式= “字词1 | WORD2” gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} {pat=$regex} s~/pat/' file1.log

4)的正则表达式= “字词1 | WORD2” echo $regex | gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/$1/' file1.log

提前致谢!

回答

3

你能否请尝试以下并让我知道这是否有助于你。

如果你想把这两个字符串都保存为一个变量,并且想在awk中作为正则表达式使用,那么以下内容也可能对你有帮助。

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

这里有几点太:

I-由于您没有提供INPUT_FILE样本所以无法测试,但我的直觉是,它应该工作的任何数据。

II-那么你已经在awk BEGIN节,因为默认情况下本身就被设置为新的生产线,所以你可能会删除部分来自代码冗余提到RSORS\n

+0

嗨,这工作,但我想用1个变量,我可以在awk命令之前配置,因为它可能会在下一次迭代word1,word2,word3和word4 –

+0

检查我的编辑一次,我已经添加了变量从shell到awk,其中可能有多个字符串。让我知道这是否有助于你。 – RavinderSingh13

+1

工作!谢谢! –

0

如果你想输入它作为一个复合表达式,你也可以做这一块我想:

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

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

+0

awk将RS和ORS的值赋值给新行,所以我们不需要在BEGIN节中设置。 – RavinderSingh13

+0

Thx为提示:) – JFS31