BSD grep이 라인 앵커의 시작을 존중하도록 만드는 방법

BSD grep이 라인 앵커의 시작을 존중하도록 만드는 방법

줄의 첫 번째 문자를 일치시키고 grep해당 문자만 인쇄하려고 합니다. Linux에서 GNU grep 2.20을 사용하여 다음과 같은 작업을 수행했습니다.

$ echo ab | grep -o '^.'
a
$ 

이것은 예상대로 작동합니다. ^정규식을 줄의 시작 부분에 고정하고 a문자만 인쇄합니다.

그러나 MacOS에서 BSD grep 2.5.1을 사용하면 다른 결과가 나타납니다.

$ echo ab | egrep -o '^.'
a
b
$

이는 마치 ^줄 시작 앵커 포인트가 무시되는 것과 같습니다. 흥미롭게도 $줄 끝 앵커는 grep두 스타일 모두에서 예상대로 작동합니다.

$ echo ab | grep -o '.$'
b
$ 

^흥미롭게도 BSD grep은 이 옵션이 사용되지 않으면 행 시작 앵커를 존중합니다 .-o

$ { echo a ; echo b; } | grep '^a'
a
$  
  • BSD grep을 사용하는 ^시기 를 표현하는 다른 방법이 있나요 ?-o

  • Linux 및 MacOS에서 사용할 수 있는 사용 ^시기 를 표현하는 이식 가능한 방법이 있습니까 ?-o

  • 이것은 BSD grep의 버그입니까?

답변1

더 깊이 파고들어 이 동작을 발견했습니다.FreeBSD 버그:

동일한 버전의 grep에 여전히 몇 가지 문제가 있음을 발견했습니다. 관련이 있는지는 모르겠지만 지금 여기에 첨부하겠습니다.

$ 인쇄 abc | grep -o '^[ac]'

"a"만 인쇄해야 하지만 대신 들어오는 텍스트의 각 문자에 대해 3개의 히트를 제공해야 합니다.

하지만 이 문제가 언제 해결될지는 모르겠습니다.

관련 정보