다음 중 grep을 사용하는 정규식에서 올바르게 사용되는 앵커는 무엇입니까?

다음 중 grep을 사용하는 정규식에서 올바르게 사용되는 앵커는 무엇입니까?

다음 두 명령은 동일한 출력을 제공하지만 이를 사용하는 올바른 방법은 무엇입니까?

grep ^'\<that\>' file.txt

이 단어가 첫 번째 단어로 포함된 줄 검색

grep '^\<that\>' file.txt

이전 출력과 동일합니다.

^ 앵커를 인용문 앞이나 인용문 안에 배치하는 것의 차이점은 무엇입니까? 어느 것이 적합합니까?

답변1

명령 간에 차이가 없어야 합니다. 그들은 모두 똑같은 것을 실행합니다:

$ set -x  ## turn on debugging info

$ /bin/grep ^'\<that\>' file.txt
+ /bin/grep '^\<that\>' file.txt

$ /bin/grep '^\<that\>' file.txt
+ /bin/grep '^\<that\>' file.txt

위에서 볼 수 있듯이 두 버전 모두 정확히 동일한 작업을 실행합니다.

즉, 일반적으로 전체 정규식을 따옴표로 묶는 것이 항상 더 안전하므로 다음을 사용하십시오.

/bin/grep '^\<that\>' file.txt

이 경우에는 별 차이가 없지만 정규식에 셸에 중요한 문자가 포함되어 있으면 큰 차이가 발생할 수 있습니다. 예를 들어:

grep ;'foo' file

여기서 쉘은 ;제어 문자를 해석하고 ( grep인수 없음) 및 'foo' file.

답변2

따옴표 밖에 "^"를 넣으면 쉘이 이를 리디렉션으로 해석할 수 있습니다. 인용하면 이 문제를 피할 수 있습니다. 이는 더 이상 사용되지 않는 것으로 간주되지만 예를 들어 다음에서 찾을 수 있습니다.물고기의 변경 내역:

탈자 부호^리디렉션은 이제 stderr이 토큰의 첫 번째 문자인 경우에만 발생하므로 git 사용자가 만족합니다 #168

추가 자료:

캐럿을 사용할 수 있습니다.'^', 파이프 기호 "|"를 대체합니다. 이는 주요 전신인 Thompson 쉘에서 유래되었습니다. (널리 배포되지 않고 디자인이 정리될 때 이 기능이 제거된 버전 8 셸은 예외입니다.)

관련 정보