
次のテキストがあります。
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()
関数によって再組み立てられます。