テキスト 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行ではなく2行のテキストで終わり、分割位置を決定できるようにしたいです。sedまたはを使用してこれをどのように実行できますかawksplitどちらを使用するかはあまり心配しませんが、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}'

関連情報