tr을 사용하여 각 줄에 1단어가 포함되도록 txt 파일 형식을 다시 지정하세요.

tr을 사용하여 각 줄에 1단어가 포함되도록 txt 파일 형식을 다시 지정하세요.

구두점, 숫자, 대문자를 모두 제거하고 한 줄에 단어가 1개만 포함되도록 파일을 수정하고 싶습니다. 예:
안녕하세요, 잘 지내세요!

어떻게 지내
세요

약간의 도움을 받아 나는 이것을 생각해 냈습니다.

tr -d '[:punct:]' < file | tr -s '[:space:]' '\n' | tr -d '[0-9]' | tr '[A-Z]' '[a-z]' > cleanfile.txt

그러나 문제는 내 파일에 주소가 있을 때 대신 httpadresscom으로 끝난다는 것입니다.

http  
adress  
com 

또한 "don't" 또는 "readme.txt"와 같은 단어가 이 출력을 갖는 것을 원하지 않습니다.

don  
t  
readme  
txt

답변1

이렇게 하면 안에 점과 따옴표만 남기고 모든 단어를 분리해야 합니다. 밑줄은 아마도 원하지 않을 것입니다. 그러면 \w작동하지 않습니다.

]# grep -oE "(\w|\.\w|'\w)*" text
one
two
Three
four
linux
file
system
isn't
What
nothing
mailto
a.b
some.org
Molly's
cat
Wrote
a
readme.txt

하나 또는 둘. 34리눅스의 파일시스템은 무엇인가요? "아무것도 없음" 메일 수신처: [이메일 보호됨]몰리의 고양이. readme.txt를 썼습니다.

문제는 tr필요한 최소한의 컨텍스트입니다. 여기서 당신은 some.org분할을 원하기 때문에 붙어 있지만 readme.txt그렇지 않습니다. 이제 "@"이 사라졌습니다.

답변2

첫 번째 부분에서는 구두점을 제거하지 말고 공백으로 변환하세요.

두 번째 경우(기다리지 마세요): 단어 사전이 필요하거나 's를 제거하지 않을 수도 있습니다.

관련 정보