使用 sed、grep 和 PCRE 将单词与可选分隔符匹配

使用 sed、grep 和 PCRE 将单词与可选分隔符匹配

如何将单词与可选分隔符匹配?

假设我有一个名为file

a
b
"a"
"a
c

我只想匹配带引号或不带引号的a(我不想匹配"a)。我想用grep,sed和 Perl 兼容的正则表达式进行这样的匹配。我可以

  • egrep '^("a"|a)$' <file
  • sed -nr 's/^("a"|a)$/\1/p' <file

但它……丑陋。

答案1

这应该有效:

egrep '^("?)a\1$' <file

请参阅此问题以获取更多信息:https://stackoverflow.com/questions/31730946/matching-in-matching-space-with-sed-since-when-it-is-supported/31731446

答案2

在 Perl 中(一行):

perl -ne 'print "$1\n" if (m/^(a|"a")$/);' < filename

$1是捕获的文本里面括号。

输出:

a
"a"

作为脚本,你可以这样写:

#!/usr/bin/perl
use strict;
use warnings;

open my $fh, "<", "abc.txt" or die $!;

while (<$fh>)
{
    chomp;
    print $_, "\n", if (m/^(a|"a")$/);
}
close $fh;

相关内容