선택적 구분 기호를 사용하여 단어를 일치시키는 방법은 무엇입니까?
다음과 같은 파일이 있다고 가정해 보겠습니다.file
a
b
"a"
"a
c
따옴표 유무에 관계없이 일치하고 싶습니다 a
(일치하고 싶지 않음 "a
). 이러한 일치를 수행하기 위해 Perl 호환 정규 표현식을 grep
사용 하고 싶습니다 . sed
저 할 수 있어요
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;