sed, grep 및 PCRE를 사용하여 선택적 구분 기호로 단어를 일치시킵니다.

sed, grep 및 PCRE를 사용하여 선택적 구분 기호로 단어를 일치시킵니다.

선택적 구분 기호를 사용하여 단어를 일치시키는 방법은 무엇입니까?

다음과 같은 파일이 있다고 가정해 보겠습니다.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;

관련 정보