从每行具有可变列数(制表符分隔)的文本文件中,我想提取具有特定条件的值。 文本文件如下所示:
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脚本技术来进行文本操作。
提前致谢!
答案 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*
匹配零个或多个非空格字符。