tr 명령을 사용하여 마침표, 느낌표, 물음표, 공백 및 개행 문자를 바꾸는 방법은 무엇입니까?

tr 명령을 사용하여 마침표, 느낌표, 물음표, 공백 및 개행 문자를 바꾸는 방법은 무엇입니까?

다음과 같은 텍스트가 있습니다.

I am happy. I am here. How are you, Meg? 

나는 이것이 다음과 같기를 원합니다:

I am happy.
I am here.
How are you, Meg? 

한동안 나는 노력했다.

tr -s '. ' '\n' <file.txt >out.txt

그러나 이것은 작동하지 않습니다.

답변1

넌 몰라. tr이를 위해 설계되지 않았습니다. 이는 다음 그룹을 음역하도록 설계되었습니다.단일 문자다른 그룹 입력단일 문자, 예를 들어 A-Z를 입력합니다 a-z. trwith .␣(점과 공백)을 사용하면 \n모든 점과 공백이 개행 문자로 대체됩니다.

대신 (GNU)를 사용하세요 sed:

$ echo 'I am happy. I am here. How are you, Meg?' | sed 's/\([!.?]\) /\1\n/g'
I am happy.      
I am here.       
How are you, Meg?

여기의 편집 스크립트는 문자열 sed의 모든 항목을 동일한 문자와 줄 바꿈 또는 공백으로 대체 !합니다 ..?

답변2

내가 아는 tr한 단일 문자에만 작동합니다."."문자열은 문자가 아니므로 sed원하는 것을 사용하거나 수행 할 수 있습니다 awk. 예를 들면 다음과 같습니다.

sed -e "s/\. /\n/g" file.txt > out.txt

답변3

tr이미 언급했듯이 의 특성상 원하는 것을 얻을 수 없습니다 tr. 그러나 다른 옵션도 많이 있습니다. 예를 들어 Python 2입니다.

문장으로서 우리는 이렇게 할 수 있습니다:

python -c "import sys;print '\n'.join([ j.strip() for l in sys.stdin.readlines() for j in  l.rstrip().split('.')])" < input.txt

스크립트로 보면 다음과 같습니다:

#!/usr/bin/env python
import sys

sentences = []
for line in sys.stdin:
    for sentence in line.rstrip().split('.'):
        sentences.append(sentence.strip())

print "\n".join(sentences)

다음과 같이 사용하십시오.

$ ./split_to_lines.py  < input.txt                                                                    
I am happy
I am here
How are you, Meg?

여기서는 특별히 복잡한 일이 발생하지 않습니다. 파일의 모든 줄을 에서 문장으로 분할한 .다음 각 문장의 앞뒤 공백을 제거합니다. 이 모든 것은 목록으로 들어간 다음 .join() 함수를 통해 다시 조립됩니다.

관련 정보