줄의 첫 번째 문자를 일치시키고 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개의 히트를 제공해야 합니다.
하지만 이 문제가 언제 해결될지는 모르겠습니다.