仅提取第一次出现的字符串

时间:2012-09-10 07:31:21

标签: regex perl find-occurrences

我搜索了很多,但我找不到适合我所寻找的答案,所以我发布了这个问题。

我想提取第一次出现'par','comp''order'和'nameprefix'。如何为示例输入执行此操作?是否有任何perl oneliners可以做到这一点?

    wertydhhdbc->auCdl = '( nil
    par    (xyz)
    comp     asd1
    order        (done)
    namePrefix        "X"
    par    (xyz)
    comp     asd
    order        (done)
    namePrefix        "R"
    namePrefix        "X"
    par    (qwer)
    comp     key
    order        (done)
    namePrefix        "X"
    comp     key
    order        (done )
    par    (qwer)
    order        (done)

2 个答案:

答案 0 :(得分:3)

是的,您可以使用简单的Perl onle-liner来显示第一行包含例如par

perl -ne 'if (/par/) { print; last; }'  1.txt

-n开关使perl逐个遍历输入文件行。然后代码打印线并在找到给定模式后停止。

<强>更新

要搜索每个单词的第一个出现,必须使用不同的技术:

perl -ne 'if(/(comp|par|order)/) {$f{$1}++; print if 1 == $f{$1} ; last if 3 == keys %f}' 1.txt

3是您要搜索的单词数。

答案 1 :(得分:1)

假设你想要第一次出现'par','comp''order'和'nameprefix'的整行。使用\b可避免匹配orders

等字词
print $1 if $str =~ /(\b(?:par|comp|order|nameprefix)\b.+)/

这将输出

par    (xyz)