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-ztrwith .␣(ドットとスペース)を使用すると、\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() 関数によって再組み立てられます。

関連情報