从文件中 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个或多个不是;
的任意字符
我有一个名为 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个或多个不是;
的任意字符