grep을 사용하여 각 문자가 최대 1번 나타나는 단어를 찾습니다.

grep을 사용하여 각 문자가 최대 1번 나타나는 단어를 찾습니다.

각 단어가 다른 줄에 배치되는 큰 텍스트 파일이 있고 문자가 포함된 각 단어를 최대 한 번 찾아야 합니다.

(내가 찾아야 할 단어의 예 : 손가락, 석탄, 꿈, 나, 땅콩)

(출력에서 수신을 허용하지 않는 단어의 예: test(2 t 포함), strict(2 s 포함), zepelin(2 e 포함))

답변1

GNU 사용 sed:

sed -E '/(.).*\1/d' <file

GNU를 사용하면 sed아래와 같이 정규식에서 캡처링 그룹과 역참조를 사용할 수 있습니다. 우리는 단일 문자 캡처를 사용한 (.)다음 원하는 만큼의 다른 문자를 캡처한 다음 동일한 문자를 다시 캡처합니다. 패턴이 일치하면 입력에서 해당 줄을 제거하고, 그렇지 않으면 해당 줄을 인쇄합니다.

예:

$ cat file
coal
dream
fingers
me
peanut
serious
zepelin
$ sed -E '/(.).*\1/d' <file
coal
dream
fingers
me
peanut

반복되는 문자가 포함된 단어 찾기:

$ sed -E '/(.).*\1/!d' <file
serious
zepelin

grep이것은 GNU에서도 작동하는 것 같습니다:

$ grep -vE '(.).*\1' <file
coal
dream
fingers
me
peanut
$ grep -E '(.).*\1' <file
serious
zepelin

관련 정보