我有一个相当复杂的文本文件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
之间的界限?
答案 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