如何将单词与可选分隔符匹配?
假设我有一个名为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;