从文件中 grep 字符串并读取第一个具有完整变量名的匹配字符串

To grep string from file and read first matching string with full variable name

我有一个名为 file.txt 的文件,我正在尝试读取与文件中的模式搜索相匹配的字符串优先搜索。这里的问题是我的命令打印了整行。我正在寻找与具有完整变量名称的搜索模式匹配的变量,在此示例中它是 warning_duration=""; 我的搜索模式是 duration *=.我已经发布了我试图读取结果的命令也有预期的结果。

请帮忙!!!

file.txt

    warning_type="";warning_threshold="";warning_duration="";oemhp_power_micro_ver="";previous_warning_threshold="";
    duration=19;
    duration  =1;

我试过的命令:

cat  file.txt | grep -m1 "duration *="

warning_type="";warning_threshold="";warning_duration="";oemhp_power_micro_ver="";previous_warning_threshold="";
cat  file.txt | grep -oP -m1 "duration *="

duration=

expected result:-

warning_duration="";

您能否尝试使用显示的示例进行以下、编写和测试。简单的解释是;使用 match 函数匹配正则表达式 ;[_[:alnum:]]+duration="" 以通过 OP eg--> warning_duration=""

获取所需的值
awk 'match([=10=],/;[_[:alnum:]]+duration=""/){print substr([=10=],RSTART+1,RLENGTH-1)}' Input_file

使用 GNU grep 和您展示的示例,您可以尝试以下操作。

grep -oP '.*?;.*?;\K[_[:alnum:]]+duration=""' Input_file

说明: 使用 GNU grep-oP 选项来匹配完全匹配并启用 PCRE正则表达式在这里。在正则表达式中提到非贪婪匹配以匹配到第二个分号并忘记(删除) \K 选项匹配的值并匹配 alphanumeric9with _) ` 或多次出现以及 duration="" 以获得当前行中的匹配值。

您可以使用这个 grep 命令:

grep -m1 -woE "[_[:alnum:]]*duration *=[^;]*" file

warning_duration=""

详情:

  • -o: 只显示匹配项
  • -E: 启用扩展正则表达式
  • -w: 词搜索
  • [_[:alnum:]]*:匹配0个或多个_或字母数字字符
  • duration *=:匹配duration后跟0个或多个空格和=
  • [^;]*:匹配0个或多个不是;
  • 的任意字符