【问题标题】:To grep string from file and read first matching string with full variable name从文件中 grep 字符串并读取具有完整变量名的第一个匹配字符串
【发布时间】:2021-07-19 18:28:45
【问题描述】:

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

请帮忙!!!

文件.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="";

【问题讨论】:

    标签: linux awk sed command-line grep


    【解决方案1】:

    你可以使用这个grep 命令:

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

    详情:

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

    【讨论】:

      【解决方案2】:

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

      awk 'match($0,/;[_[:alnum:]]+duration=""/){print substr($0,RSTART+1,RLENGTH-1)}' Input_file
      

      使用 GNU grep 和您展示的示例,您可以尝试关注。

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

      说明: 使用 GNU grep-oP 选项匹配完全匹配并在此处启用 PCRE 正则表达式。在正则表达式中提到非贪婪匹配以匹配直到第 2 个分号并通过 \K 选项忘记(删除)匹配值并匹配 alphanumeric9 与 _) ` 或更多次出现以及 duration="" 以获取当前的匹配值行。

      【讨论】:

      • 匹配模式应该只有duration="",在你的情况下是_duration=""
      • @AmithKotian,_ 是否会在每次持续时间之前出现,或者其他任何事情也可能出现?
      • 如果您看到文件持续时间的内容不会以 _duration 开头。搜索模式应始终为持续时间。
      • @AmithKotian,但您的预期输出是warning_duration=""; 对。你能详细说明一下吗?
      • 是的,考虑一下我从 file2.txt 中提取模式持续时间的情况,导致输出我需要在另一个 file1.txt 中搜索。所以来自 file2.txt 的模式总是持续时间。
      猜你喜欢
      • 2019-11-02
      • 2019-01-12
      • 1970-01-01
      • 2012-11-27
      • 2022-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多