首页 > 解决方案 > 提取文本文件行中的部分重复模式

问题描述

给定一个文本文件的形式:

firstword<number1>,<string1>:<number2>,<string2>:<number3>,<string>:<number4>...
firstword<number1>,<string1>:<number2>,<string2>:<number3>,<string>:<number4>...
firstword<number1>,<string1>:<number2>,<string2>:<number3>,<string>:<number4>...
...

其中每一行可以彼此不同,并且可以有任意数量的字符串:数字对。“firstword”总是一样的。字符串和数字的内容可以改变,例如数字可以是“12345”,字符串可以是“abc”(不带引号)。

此外,一行可以有多次相同的字符串(多少次是未知的,每行不同),每行都有不同的关联编号。例如:

firstword123,abc:123,cde:234,abc:345,def:456

如果现在只想提取第一个单词和数字(在本例中为 firstword123),以及特定字符串的一行中的所有 string:number 对,如何做到这一点?在上面的示例中,如果为字符串选择值“abc”,则提取的行应如下所示:

firstword123,abc:123,abc:345

我正在寻找一种适用于 Bash(可能还有其他命令)的解决方案。

标签: regexlinuxbashcommand-line

解决方案


你可以为此使用 perl

#!/usr/bin/perl
my $first='firstword123';
my $str='abc';

while (<DATA>) {
    next if not /^$first/;
    print "$first";
    print ",$_" for ($_ =~ /$str:\d+/g);
}

__DATA__
firstword123,abc:123,cde:234,abc:345,def:456

出去:

firstword123,abc:123,abc:345

推荐阅读