如何在UNIX或Perl中搜索和打印匹配的wold?

时间:2019-03-27 07:25:36

标签: perl unix

1=ABC,2=mnz,3=xyz
1=pqr,3=ijk,2=lmn

我在要搜索1=的文本文件中有此文件,应该只打印匹配的单词1=ABC1=pqr

在Perl或Unix中有任何建议吗?

2 个答案:

答案 0 :(得分:1)

输入:

$ cat grep.in 
1=ABC,2=mnz,3=xyz
1=pqr,3=ijk,2=lmn
4=pqr,3=ijk,2=lmn

命令:

$ grep -o '1=[^,]\+' grep.in 
1=ABC
1=pqr

说明:

您只需在输入中使用grep

  • -o仅输出匹配的模式
  • 1=[^,]\+的正则表达式将匹配以1=开头的字符串,然后是至少一个不是逗号的字符(我基于这样的假设,即在字符串的正确部分中没有逗号=(分隔符除外)
  • 如果您要接受空白结果,则可以通过\+来更改*

答案 1 :(得分:0)

您输入的数据似乎是CSV格式。这是一个基于Text::CSV

的Perl解决方案
  • 按行解析CSV内容
  • 打印以1=开头的列
#!/usr/bin/perl
use warnings;
use strict;

use Text::CSV;

my $csv = Text::CSV->new({
    binary   => 1,
    eol      => "\n",
}) or die "CSV\n";

# parse
while (my $row = $csv->getline(\*DATA)) {
    foreach (@{ $row }) {
        print "$_\n" if /^1=/;
    }
}

exit 0;

__DATA__
1=ABC,2=mnz,3=xyz
1=pqr,3=ijk,2=lmn

试运行:

$ perl dummy.pl
1=ABC
1=pqr

DATA替换为STDIN,以从标准输入中读取输入。