Linuxで文を別の行に入れる方法

Linuxで文を別の行に入れる方法

テキストファイルの文を別の行に配置するという課題があります。このようなものはほとんど動作します。

cat file.txt | tr '.' '\n'

しかし、私は私の文章でドット、疑問符、感嘆符を失いたくありません。どうすればいいですか?

ベストアンサー1

実際のデータ例を見ないと確かに言えないけどどうしたらいいですか?おそらく.探しているのは、各発生!後に改行文字を追加することです?。セミコロン(;)は実際に文の終わりを表示しないので、何をしたいのかわかりません。それはあなた次第です。

とにかく試してみてくださいsed

$ echo 'This is a sentence! And so is this. And this one?' | 
    sed 's/[.!?]  */&\n/g' 
This is a sentence! 
And so is this. 
And this one?

s///置換演算子です。一般的な形式はでs/pat/replacement置き換えられるということです。最後に、すべての発生に対して交換を実行させます。それ以外の場合は、最初のエントリで停止します。これは「一致するすべて」を意味する特別な構造です。したがって、ここでは、またはいずれかを一致する項目と改行文字に置き換えます。patreplacementgpat&sed.!?

テキストに省略形(たとえば)を含めることができる場合は、e.g.次の文字が大文字の場合にのみ置き換えることができます。

$ echo 'This is a sentence! And so is this. And this one? Negative, i.e. no.' | sed 's/\([.!?]\) \([[:upper:]]\)/\1\n\2/g' 
This is a sentence!
And so is this.
And this one?
Negative, i.e. no.

これは、文を定義した後に次の文字を大文字とDr. Jones said hello.見なすため、文を正しく処理しないことに注意してください。しかし今、私たちは単純な質問と答えの形式をはるかに超えたレベルの複雑さを持ち、実際には完全な自然言語パーサーが必要です。.Dr

おすすめ記事