다음과 같은 텍스트가 있습니다.
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
. tr
with .␣
(점과 공백)을 사용하면 \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()
함수를 통해 다시 조립됩니다.