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

时间:2015-02-09 15:07:27

标签: bash substring

从每行具有可变列数(制表符分隔)的文本文件中,我想提取具有特定条件的值。 文本文件如下所示:

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脚本技术来进行文本操作。

提前致谢!

1 个答案:

答案 0 :(得分:1)

你可以使用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*匹配零个或多个非空格字符。