egrep 정규식 - 시작과 끝이 같은 단어

egrep 정규식 - 시작과 끝이 같은 단어

줄의 시작과 끝 부분에 같은 단어가 있는 모든 줄을 찾고 싶습니다.

예를 들어:

goodword         fgdlakj 3t sfkl 43lk fkl goodword
bad sfa;lk3t   dgk;gs    34;kl bad334
singleword

원하는 출력

goodword         fgdlakj 3t sfkl 43lk fkl goodword
singleword

내 코드는 다음과 같습니다

egrep "(^.+)([ ]+.*\1)$"

줄에 단어가 2개 이상 있으면 작동합니다. 하지만 한 단어가 포함된 줄도 일치시키고 싶습니다.

그래서 나는 다음을 시도한다:

egrep "(^.+)($|([ ]+.*\1)$)"

더 이상 작동하지 않습니다. 이유를 모르겠습니다.

답변1

대신 다음을 사용하는 것이 좋습니다 awk.

awk '$1==$NF' file

이 솔루션의 장점은 읽기가 더 쉽고 두 번째로 필드 구분 기호( -F옵션 사용)를 쉽게 변경할 수 있다는 것입니다. 줄의 시작 부분과 끝 부분의 공백 수가 동일하더라도 일치합니다.

답변2

물론좋아요조립식 쇠지레답변하지만 계속한다면grep:

grep -Ex '(\S+)(.*\1)?' file

답변3

POSIX의 경우 grep이는 다음과 같습니다 awk '$1 == $NF'.

grep -x '[[:blank:]]*\([^[:blank:]]\{1,\}\)\([[:blank:]]\(.*[[:blank:]]\)\{0,1\}\1\)\{0,1\}[[:blank:]]*'

관련 정보