从可变列大小的文本文件中有条件地提取字符串

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 字符。