줄의 시작과 끝 부분에 같은 단어가 있는 모든 줄을 찾고 싶습니다.
예를 들어:
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:]]*'