1. 概要

sed コマンドは、Linuxコマンドラインでテキストを処理するために使用できる強力な武器です。 たとえば、 sed コマンドを使用すると、ファイルからを削除したり、行を置き換えたり新しい行を挿入したりできます。ファイル内。

このチュートリアルでは、 sed コマンドの機能を使用して、新しい行にスペースが含まれている場合に新しい行を挿入する方法を詳しく見ていきます。

2. 問題の紹介

まず、入力ファイルを見てみましょう。

$ cat input.txt 
A new line will be inserted below me:
---------------------------
This is the end of the file.

ファイルinput.txtは非常に単純に見えます。 3行しか含まれていません。 ここで、最初の行の後に新しい行を挿入します。 もちろん、改行にはスペース文字が含まれます。

問題を注意深く考えると、3つのシナリオが考えられます

  • まず、スペースは線の真ん中にあります。
  • 次に、行に末尾のスペースがあります。
  • 第三に、行には先頭のスペースが含まれています。

sed を使用してファイルに改行を挿入するには、「 a 」コマンド、「 i 」コマンド、または置換コマンド「s」。

sedの「a」コマンドと「i」コマンドは非常によく似ています。 唯一の違いは、「i」はアドレスの前に新しい行を挿入し、「a」はアドレスの後に新しい行を追加することです。

このチュートリアルでは、sedの「a」コマンドに焦点を当てます。

次に、3つのシナリオを実行し、sedを使用してスペースを含む行を挿入する方法について説明します。

3. 中央にスペースのある線を挿入する

次に、sedの「a」コマンドを使用して、ファイルの2行目にスペースを含む新しい行を挿入しましょう。

$ sed '1 aI am the new line.' input.txt 
A new line will be inserted below me:
I am the new line.
---------------------------
This is the end of the file.

上記の出力が示すように、コマンドは簡単に機能します。

コマンドの「1」は、最初の行を示すアドレスです。

したがって、コマンドsed ‘1 a…’を「行番号が1の場合、その後に新しい行を追加する」に変換できます。

次に、挿入する行に末尾のスペースがある場合でも、コマンドが機能するかどうかを確認しましょう。

4. 末尾にスペースがある行を挿入する

それでは、末尾にスペースを追加して、同じコマンドを試してみましょう。 末尾のスペースを簡単に確認できるように、sedコマンドの出力を-eオプションを指定してcatコマンドにパイプします

$ sed '1 aI am the new line with trailing spaces   ' input.txt | cat -e
A new line will be inserted below me:$
I am the new line with trailing spaces   $
---------------------------$
This is the end of the file.$

今回は、上記の出力が示すように、このシナリオでも同じコマンドが機能します。

5. 先頭にスペースを入れた行を挿入する

まず、同じコマンドをもう一度試して、先頭のスペースの場合に機能することを期待しましょう。

$ sed '1 a  I am the new line with leading and trailing spaces   ' input.txt | cat -e
A new line will be inserted below me:$
I am the new line with leading and trailing spaces   $
---------------------------$
This is the end of the file.$

ご覧のとおり、出力の先頭のスペースは消えています。 そのため、コマンドは期待どおりに機能しませんでした。

この問題を解決するには、「a」コマンドの後にバックスラッシュ「\」を追加する必要があります

$ sed '1 a\  I am the new line with leading and trailing spaces   ' input.txt | cat -e
A new line will be inserted below me:$
  I am the new line with leading and trailing spaces   $
---------------------------$
This is the end of the file.$
バックスラッシュを使用して先頭のスペースをエスケープする必要があると考えるかもしれません。 しかし、それは誤解です。 したがって、ここで円記号が何をするかを明確にすることは価値があります。

6. seda」および「i」コマンドの後の円記号を理解する

sedの「a」および「i」コマンドで改行を挿入または追加できることを学びました。

a」または「i」コマンドの後の円記号は、などのエスケープシーケンスの一部として機能しません\ t をタブとして、または \nを改行として。 代わりに、挿入する新しい行のテキストの先頭を示します

バックスラッシュと改行の最初の文字が一緒にエスケープシーケンスと一致する場合でも、sedはその組み合わせをエスケープシーケンスとして解釈しません。

おそらく、例ですぐに説明できます。

$ sed '1 a\n (1) and \n (2)' input.txt
A new line will be inserted below me:
n (1) and 
 (2)
---------------------------
This is the end Of the file.

このテストでは、「 \n」が2回発生します。 2つ目は、コンテンツの一部であるため、改行文字として解釈されています。

ただし、 sed は、最初の「 \n」を通常の「n」文字として解釈しました。これは、バックスラッシュが新しいコンテンツの始まりを示しているためです。

sedの「a」または「i」コマンドを使用する場合は、新しいコンテンツの前にバックスラッシュを付けることをお勧めします。

7. 結論

このチュートリアルでは、例を通じてsedコマンドを使用してスペースを含む改行を挿入する方法について説明しました。

さらに、sedの「a」および「i」コマンドの後の円記号の機能についても説明しました。