在文本文件中搜索字符串并打印行直到下一个选项卡\ t

时间:2017-01-08 21:53:58

标签: perl parsing grep string-matching

我有一个相当复杂的文本文件file1.txt,但没有正确使用。然而,该文件以制表符分隔,即每个字符串由\t分隔。

我想编写一个脚本/使用一个Unix命令来解析整个文件中的某个字符串string1:,它会在冒号之后打印该行,直到停在\t

文本文件如下所示:

...kjdafhldkhlfak\tSTRING1:Iwanttokeepthis\tfadfasdafldafh\tSTRING1:andthis\tafsdkfasldh....

所以grep之类的函数输出

Iwanttokeepthis
andthis

在Perl中,我知道如何使用

打印字符串
perl -wln -e 'print if /\bSTRING1\b/' file1.txt

如何修改此内容以打印STRING1:\t之间的界限?

2 个答案:

答案 0 :(得分:5)

使用Perl:

$ echo $'kjdafhldkhlfak\tSTRING1:Iwanttokeepthis\tfadfasdafldafh\tSTRING1:andthis\tafsdkfasldh' > /tmp/file
perl -lne 'while (/STRING1:([^\t]+)\t/g) {print $1}' /tmp/file
Iwanttokeepthis
andthis

或者,正如评论中所述:

$ perl -nle'print for /STRING1:([^\t]*)\t/g' /tmp/file
Iwanttokeepthis
andthis

答案 1 :(得分:1)

使用GNU grep:

grep -Po 'STRING1:\K.*?(?=\t)' file

输出:

Iwanttokeepthis
andthis

请参阅:The Stack Overflow Regular Expressions FAQ