1=ABC,2=mnz,3=xyz
1=pqr,3=ijk,2=lmn
我在要搜索1=
的文本文件中有此文件,应该只打印匹配的单词1=ABC
和1=pqr
在Perl或Unix中有任何建议吗?
答案 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解决方案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
,以从标准输入中读取输入。