我搜索了很多,但我找不到适合我所寻找的答案,所以我发布了这个问题。
我想提取第一次出现'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)
答案 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)