sed가 일치하지 않는 줄을 생략하는 방법?


8

다음 예제에서는 a 또는 a로 sed시작하는 행을 일치 시키고 해당 행의 첫 번째 문자 ( 또는 ) 를 인쇄합니다 .acac

$ echo "ag
bh
ci
dj
ek
fl" | sed 's/\(a\|c\)./\1/' # Matches lines starting with 'a' or 'c'.

output:
a
bh
c
dj
ek
fl

그러나 패턴과 일치하지 않는 선도 인쇄됩니다. sed패턴과 일치하지 않는 줄을 생략하도록하려면 어떻게해야 합니까? 원하는 효과 grep를 다음과 같이 조합하여 얻을 수 있지만 sed"자체적으로"달성 할 수 있는지 알고 싶습니다 .

$ echo "ag
bh
ci
dj
ek
fl" | grep '[ac]' | sed 's/\(a\|c\)./\1/'

output:
a
c

실제로 알고 싶었던 것은 중요하지 않지만 패턴은 ^로 시작해야하므로 줄의 시작 부분에 고정됩니다. 코딩 된 것처럼 마지막 문자가 아닌 한 줄의 아무 곳이나 a 또는 c와 일치합니다.
Joe

답변:


12

no-print플래그 ( -n)를 사용하고 성공적인 대체 명령 ( s///p)을 명시 적으로 인쇄하십시오 .

 sed -n 's/\(a\|c\)./\1/p'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.