簡體   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