当サイトではアフィリエイト広告を利用しています。

sedコマンドで様々な場所に文字列を挿入する方法!!【Linux】【シェルスクリプト】

Unix・Linuxでsedコマンドを使うと、テキストファイルなどの文字列のあらゆる場所に挿入することが出来ます。

今回はこのsedコマンドを使ってサンプルテキストのあらゆるところに文字列を挿入する方法をメモします。

 

今回のサンプルとなるテキスト

今回は以下のようなテキストファイル用意してからsedコマンドで加工していきます。

sedsample.txt

1gyoume
2gyoume
3gyoume

5gyoume
hayana
end

“3gyoume"と"5gyoume"の間は空白行です。

 

行番号を指定して文字列を挿入する

ファイルの最上部、最下部、指定した行番号の上下に文字列を挿入する方法をメモします。

 

ファイルの先頭行に文字列を挿入する

ファイルの先頭行とはサンプルでいうところの"1gyoume"と書いている行です。

この"1gyoume"の上に"hogehoge"という文字列を割り込ませてみましょう。

コマンドは以下のコマンドを使います。

sed '1i hogehoge' sedsample.txt

“sedsample.txt"というファイルの1行目に"hogehoge"という文字列を割り込ませてください。というコマンドです。

このコマンドを実行すると以下のような結果が返ってきます。

hogehoge
1gyoume
2gyoume
3gyoume

5gyoume
hayana
end

先頭行に"hogehoge"が挿入されました。

 

指定した行数の上に文字列を挿入する

「ファイルの先頭行に文字列を挿入する」の回でのコマンドで察しがついていると思いますが、数字を変えるだけで好きな行番号の場所に文字列を挿入することもできます。

では3行目に挿入してみましょう。"3gyoume"と書いてある行の上に"hogehoge"という文字列を割り込ませます。

コマンドは以下のコマンドを使います。

sed '3i hogehoge' sedsample.txt

“sedsample.txt"というファイルの3行目に"hogehoge"という文字列を割り込ませてください。というコマンドです。

“3i"のところの数字を任意の数字に変更すれば指定した行に挿入できます。

このコマンドを実行すると以下のような結果が返ってきます。

1gyoume
2gyoume
hogehoge
3gyoume

5gyoume
hayana
end

3行目に"hogehoge"が挿入されました。

また、ファイルに存在する最大行数を超える行数は指定できません。

今回のサンプルファイルの場合最大行数は7行ですので7行目に指定すると"end"の行の上に割り込まれます。

8行目以上を指定するとサンプルファイルに変化はありません。

 

各行すべての行の上に文字列を割り込ませる

次はサンプルファイルに存在する7行すべての行に"hogehoge"という文字列を挿入します。

コマンドは以下のコマンドを使います。

sed 'i hogehoge' sedsample.txt

今までは"3i"といったように"i"の前に数字を入れて行数を指定していましたが、行数指定せずに"i"のままsedを実行するとどうなるかというものです。

このコマンドを実行すると以下のような結果が返ってきます。

hogehoge
1gyoume
hogehoge
2gyoume
hogehoge
3gyoume
hogehoge

hogehoge
5gyoume
hogehoge
hayana
hogehoge
end

空白行を含めたすべての行の上に"hogehoge"が挿入されました。

 

ファイルの最終行に文字列を挿入する

ファイルの最終行とはサンプルでいうところの"end"と書いている行です。

この"end"の下に"Hontono End"という文字列を割り込ませてみましょう。

コマンドは以下のコマンドを使います。

sed '$a Hontono End' sedsample.txt

“sedsample.txt"というファイルの最終行=$の下に"Hontono End"という文字列を割り込ませてください。というコマンドです。

このコマンドを実行すると以下のような結果が返ってきます。

1gyoume
2gyoume
3gyoume

5gyoume
hayana
end
Hontono End

最終行に"Hontono End"が挿入されました。

 

指定した行数の下に文字列を挿入する

「ファイルの最終行に文字列を挿入する」の回でのコマンド内にある”$”で最終行を指定していましたが、この”$”を数字を変えると好きな行番号の下に文字列を挿入することもできます。

では3行目に挿入してみましょう。"3gyoume"と書いてある行の下に"hogehoge"という文字列を割り込ませます。

コマンドは以下のコマンドを使います。

sed '3a hogehoge' sedsample.txt

“sedsample.txt"というファイルの3行目に"hogehoge"という文字列を割り込ませてください。というコマンドです。

“3a"のところの数字を任意の数字に変更すれば指定した行に挿入できます。

このコマンドを実行すると以下のような結果が返ってきます。

1gyoume
2gyoume
3gyoume
hogehoge

5gyoume
hayana
end

3行目の下に"hogehoge"が挿入されました。

また、ファイルに存在する最大行数を超える行数は指定できません。

今回のサンプルファイルの場合最大行数は7行ですので7行目に指定すると"end"の行の下に割り込まれます。

8行目以上を指定するとサンプルファイルに変化はありません。

 

各行すべての行の下に文字列を割り込ませる

次はサンプルファイルに存在する7行すべての行に"hogehoge"という文字列を挿入します。

コマンドは以下のコマンドを使います。

sed 'a hogehoge' sedsample.txt

今までは"3a"といったように"a"の前に数字を入れて行数を指定していましたが、行数指定せずに"a"のままsedを実行するとどうなるかというものです。

このコマンドを実行すると以下のような結果が返ってきます。

1gyoume
hogehoge
2gyoume
hogehoge
3gyoume
hogehoge

hogehoge
5gyoume
hogehoge
hayana
hogehoge
end
hogehoge

空白行を含めたすべての行の下に"hogehoge"が挿入されました。

 

ファイル内にある文字列を指定して文字列を挿入する

ファイル内にある文字列を指定して、その文字列の上下に別の文字列を挿入する方法をメモします。

 

ファイル内の文字列を指定して、その上に文字列を挿入する

サンプルファイルの文字列(例:3gyoume)の上に"hogehoge"という文字を入れてみましょう。

コマンドは以下のコマンドを使います。

sed '/3gyoume/i hogehoge' sedsample.txt

“sedsample.txt"というファイル内にある"3gyoume"という文字列の上(i)に"hogehoge"という文字列を割り込ませてください。というコマンドです。

このコマンドを実行すると以下のような結果が返ってきます。

1gyoume
2gyoume
hogehoge
3gyoume

5gyoume
hayana
end

 

ファイル内の文字列を指定して、その下に文字列を挿入する

次はサンプルファイルの文字列(例:3gyoume)の下に"hogehoge"という文字を入れてみましょう。

コマンドは以下のコマンドを使います。

sed '/3gyoume/a hogehoge' sedsample.txt

“sedsample.txt"というファイル内にある"3gyoume"という文字列の下(a)に"hogehoge"という文字列を割り込ませてください。というコマンドです。

このコマンドを実行すると以下のような結果が返ってきます。

1gyoume
2gyoume
3gyoume
hogehoge

5gyoume
hayana
end

 

sedコマンドの出力結果をファイルに上書きする

上記のように様々な方法でsedコマンドを使って文字列を挿入しましたが、挿入結果を表示しただけで保存はされていません。

挿入結果を">"で上書きする方法もありますが、iオプションを使う方が簡潔です。

 

使い方はsedの直後に"-i"をつけるだけで完了です。

以下、使用例です。

sed -i '1i hogehoge' sedsample.txt

sedsample.txtファイルの最初の行(1i)に"hogehoge"を挿入して保存(-i)する。というコマンドです。

このコマンドを実行すると以下のような流れになります。

//まずはsedsample.txtの1行目に"hogehoge"を挿入して結果をそのファイルに上書き
$ sed -i '1i hogehoge' sedsample.txt

//次にcatコマンドでsedsample.txtの内容を確認
$ cat sedsample.txt
hogehoge
1gyoume
2gyoume
3gyoume

5gyoume
hayana
end

正しくsedsample.txtに保存されました!

 

ということで、sedコマンドで文字列を挿入する方法のメモでした。