从可变列大小的文本文件中有条件地提取字符串
extract string conditionally from variable column sized text file
我想从每行列数可变(制表符分隔)的文本文件中提取具有特定条件的值。
文本文件如下所示:
S1=dhs Sb=skf S3=ghw QS=ghr</b>
S1=dhf QS=thg S3=eiq<b/>
QS=bhf S3=ruq Gq=qpq GW=tut<b/>
Sb=ruw QS=ooe Gq=qfj GW=uvd<b/>
我想要这样的结果:
QS=ghr<b/>
QS=thg<b/>
QS=bhf<b/>
QS=ooe
请原谅我的幼稚问题,但我是初学者,正在尝试学习一些基本的 bash 文本操作脚本技术。
提前致谢!
你可以使用 awk ,
awk '{for(i=1;i<=NF;i++){if($i~/^QS=/){print $i}}}' file
此 awk 命令遍历每个字段并检查开头有 QS=
字符串的列。如果找到任何内容,则会打印相应的列。
通过grep,
grep -oP '(^|\t)\KQS=\S*' file
-o
参数表示只匹配。所以它只打印匹配的字符。
-P
这会启用 Perl-regex 模式。
(^|\t)
匹配行首或制表符。
\K
丢弃先前匹配的制表符或行边界的开头。
QS=
现在它匹配 QS=
字符串。
\S*
匹配零个或多个非 space 字符。
我想从每行列数可变(制表符分隔)的文本文件中提取具有特定条件的值。 文本文件如下所示:
S1=dhs Sb=skf S3=ghw QS=ghr</b>
S1=dhf QS=thg S3=eiq<b/>
QS=bhf S3=ruq Gq=qpq GW=tut<b/>
Sb=ruw QS=ooe Gq=qfj GW=uvd<b/>
我想要这样的结果:
QS=ghr<b/>
QS=thg<b/>
QS=bhf<b/>
QS=ooe
请原谅我的幼稚问题,但我是初学者,正在尝试学习一些基本的 bash 文本操作脚本技术。
提前致谢!
你可以使用 awk ,
awk '{for(i=1;i<=NF;i++){if($i~/^QS=/){print $i}}}' file
此 awk 命令遍历每个字段并检查开头有 QS=
字符串的列。如果找到任何内容,则会打印相应的列。
通过grep,
grep -oP '(^|\t)\KQS=\S*' file
-o
参数表示只匹配。所以它只打印匹配的字符。
-P
这会启用 Perl-regex 模式。
(^|\t)
匹配行首或制表符。
\K
丢弃先前匹配的制表符或行边界的开头。
QS=
现在它匹配 QS=
字符串。
\S*
匹配零个或多个非 space 字符。