1. 概要

変数に改行を挿入する必要がある場合を想像できます。 たとえば、テキストの書式設定が必要なタスクの場合、実行するコマンドのリストを生成します。

このため、このチュートリアルでは、bashの変数に改行を挿入する方法の例を示します。

2. 書式設定済みのテキストの表示

まず、改行付きのテキストを表示する可能性について簡単に説明します。

改行文字を含むテキストがあると想像してみましょう。 echo を使ってみましょう:

$ text="first \nsecond \nthird"
$ echo $text
first \nsecond \nthird

ご覧のとおり、\ nシーケンスは改行として認識されませんでした。

2.1. echo-eコマンド

改行\n のような特殊文字シーケンスの認識を有効にするには、echoを特別オプション-eとともに使用できます。

$ text="first \nsecond \nthird"
$ echo -e $text
first 
second
third

今回は私たちが望んでいたことを達成し、言葉は新しい行にあります。

2.2. printfコマンド

printf を使用すると、 echo-eを使用した場合と同じ結果を得ることができます。

$ text="first \nsecond \nthird"
$ printf %b $text
first 
second
third

2.3. 新しい行のテキスト

新しい行のテキストがある場合の状況を考えてみましょう。

$ text="first
second
third"
$ echo "$text"
first 
second
third

挿入された改行を含むテキストを処理するときにわかるように、必要に応じてテキストを表示することもできます。 ただし、変数を括弧で囲む必要があることに注意してください。そうしないと、テキストが新しい行で表示されません。

2.4. シェルパラメータの拡張

さらに、パラメータ展開を使用してテキストを操作できます。

この目的のために、 \ n が出現する前に、$演算子を追加する必要があります。

$ text="first "$'\n'"second "$'\n'"third"
$ echo "$text"
first 
second 
third

3. テキストに改行を自動的に追加する

前のセクションでは、テキストを表示およびフォーマットして新しい行を印刷する方法を示しました。 ただし、実際の例では、テキストを前処理し、指定されたルールに従って改行を追加する機能があると非常に便利な場合があります。 そのため、テキストに新しい行を設定する方法の例をいくつか用意しました。

3.1. 改行を順次追加する

以前に例として使用していたテキストに、スペースの代わりに改行を挿入するとします。 したがって、たとえば、各ワールドを反復処理して、前のセクションですでに知っている特殊なシーケンス文字の1つを挿入できます。

$ text="first second third"
$ for word in $text
$ do
$  p+="$word"$'\n'
$ done 
$ echo "$p"
first 
second 
third

私たちが見ることができるように素晴らしい、それはうまくいきます!

3.2. 選択した文字の代わりに改行を追加する

しかし、「;」の代わりに改行を追加したい場合はどうでしょうか。 またはスペース以外の文字? このため、以前のスクリプトを少し変更する必要があります。

$ text="first ; second ; third"
$ IFS=";"
$ for word in $text; do
>  p+="$word"$'\n'
> done 
$ echo "$p"
first 
second 
third

完全! これで、変数に改行を格納する方法と、テキストまたはコマンドのシーケンスを操作して、必要な場所に改行文字を挿入する方法がわかりました。

3.3. trコマンドの使用

テキスト内のすべての単語を繰り返す代わりに、より便利なものを使用できます。 tr が私たちの目的に最適な選択になるように、次のようにします。

$ text="first second third"
$ echo $text | tr " " "\n"
first
second
third

すごい! 結果はループを使用したときと同じですが、今回はすべてを1行に収めました。

4. ファイルからのテキストの変数への割り当て

ここで、ファイルに保存されているテキストを使用するとします。 このため、以前に提示されたコマンドを使用することを妨げるものは何もありません。 ただし、ファイルのテキストを操作するときに最初に頭に浮かぶのは、sedコマンドです。

4.1. sedコマンドの使用

もちろん、sedコマンドをechoと組み合わせて、変数に割り当てられたテキストを使用した例でも使用できます。 ただし、複数行のコードを記述せずにエレガントにするために、sedを使用して例を用意しました。

$ cat text.txt 
one two three four five six
$ text=$(sed 's/ /\n/g' text.txt)
$ echo $text
one
two
three
four
five
six

コードが1行しかないので、ファイルからテキストを読み取り、スペースの代わりに改行を挿入して(もちろん、任意の文字を改行に交換できます)、それを変数に割り当てることができます。

4.2. awkコマンド

より多くのオプションがある方が常に良いと思います。 これを念頭に置いて、変数に改行を挿入するもう1つの例を示します。

$ cat text.txt 
one two three four five six
$ text=$(awk '{gsub(/ /,"\n")}1' text.txt)
$ echo $text
one
two
three
four
five
six

sed とほぼ同じように機能しますが、 awk には多くの追加機能があり、非常に便利な場合があります。

5. 結論

この記事では、改行を使用して変数を表示するためのオプションについて説明しました。 次に、改行シーケンスを変数に挿入する複数の方法を示しました。 さらに、さまざまな文字を改行文字シーケンスに置き換える方法も示しました。

最後に、ファイルからテキストを処理してフォーマットし、それを変数に割り当てる方法を示しました。