繁体   English   中英

包含在文件中的grep正则表达式(不是grep -f选项!)

[英]Grep regex contained in a file (not grep -f option!)

我正在阅读一些设备配置输出,并根据硬件配置检查配置是否正确。 模板配置存储为包含所有参数的文件,并且这些行包含正则表达式(基本上只是为了考虑输出中“object”,“param”和“value”之间的可变空格数,还有一些索引方差)

首先,我不能使用grep -f $template $output ,因为我必须分别处理模板的每一行。 我有类似的东西在运行

while read line
  do
  attempt=`grep -E "$line" $file`
  # ...etc
  done < $template

如果模板不包含正则表达式,哪个工作正常。 问题:当这些是读取表单文件时,grep会逐字地解释搜索选项。 我自己测试了正则表达式,它们在命令行中运行良好。

在此背景下,问题是:

如何从文件中读取正则表达式(逐行)并让grep不按字面解释它们?

使用-F选项或fgrep

更重要的是,您似乎想要匹配整行:添加-x选项。

使用以下脚本:

#!/usr/bin/env bash
# multi-grep
regexes="$1"
file="$2"
while IFS= read -r rx ; do
    result="$(grep -E "$rx" "$file")"
    grep -q -E "$rx" "$file" && printf 'Look ma, a match: %s!\n' "$result"
done < "$regexes"

以及包含以下内容的文件:

$ cat regexes
RbsLocalCell=S.C1.+eulMaxOwnUuLoad.+100

$ cat data
RbsLocalCell=S1C1 eulMaxOwnUuLoad 100

我得到这个结果:

$ ./multi-grep regexes data
Look ma, a match: RbsLocalCell=S1C1 eulMaxOwnUuLoad 100!

这适用于不同的间距

$ cat data
RbsLocalCell=S1C1    eulMaxOwnUuLoad           100

$ ./multi-grep regexes data
Look ma, a match: RbsLocalCell=S1C1    eulMaxOwnUuLoad           100!

好像对我来说。

另一点:通过在引号中加入"$line" ,确保shell不会以某种错误的方式解释模式。

总而言之,你最好写一个perl而不是shell脚本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM