1 行のテキストを 2 行に分割する Bash コマンド

1 行のテキストを 2 行に分割する Bash コマンド

テキストファイルのこの行が欲しい

This is to become line 1 and that is line 2

次のように 2 行に分割します。

This is to become line 1
and that is line 2

何かを編集/切り取り/削除したいわけではなく、1 文字も削除したいわけではないことに注意してください。テキストを 1 行ではなく 2 行にして、どこで分割するかを決定できるようにしたいだけです。これを行うにはsed、 またはawkまたは をsplitどのように使用すればよいですか? どれを使用するかは特に気にしませんが、可能であればsedを使用します...

答え1

「and」という単語で行を分割しようとしている場合は、これが機能します。

echo "This is to become line 1 and that is line 2" | sed 's/and/\nand/g' 
This is to become line 1 
and that is line 2

使用している sed のバージョンによって、結果が異なる場合がありますのでご注意ください。

アップデート:

分割するには、2 行目の先頭として使用したい用語/要素の前に「\n」を追加するだけです。

echo "Sun rise: <...strong...>07:24 am<../..strong..><..br ../..> Sun set: <..strong..>07:31 pm<../..strong..><..br.. /..> " | sed 's/Sun set/\nSun set/'
Sun rise: <...strong...>07:24 am<../..strong..><..br ../..> 
Sun set: <..strong..>07:31 pm<../..strong..><..br.. /..> 

答え2

を使用した個人的な実装を追加しましたawk。必要に応じて を変更できますseparator

echo "line 1 and line 2" | awk -v separator="and" 'BEGIN {FS=separator} $0 ~ separator {printf "%s\n%s%s", $1,FS,$2}'

awk私は変数を簡単に使用できる可能性から、常に を使用することを好みます。他の要素に基づいて行を分割したい場合は、セパレータ、値を別の値に変更するだけですseparator

2行目から切り取りたい場合separator(つまり、「そして2行目"、 だけ "2行目"):

echo "line 1 and line 2" | awk -v separator="and " 'BEGIN {FS=separator} $0 ~ separator {printf "%s\n%s", $1,$2}'

関連情報