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

【sedコマンド】ファイル内の指定した文字列の上下に別ファイルの文字列を挿入する方法【Linux】【シェルスクリプト】

この前はsedコマンドを使ってファイルのあらゆるところに文字列を挿入する方法をメモしました。

今回は、このsedコマンドを使って加工するファイル内の指定した文字列の"上の行"や"下の行"に、他のファイルに書いてある文字列を引っ張ってきて、挿入する方法をメモします。

sedコマンドって結構ごちゃごちゃしたコマンドな印象がありましたが、今回メモするコマンドはものすごく簡単です!

 

2つのサンプルファイル

sedコマンドで加工するサンプルファイル

sedsample.txt

1gyoume
2gyoume
3gyoume
4gyoume
5gyoume
hayana
end

sedコマンドで挿入されるサンプルファイル

hayanased.txt

---------
HayanaLab
---------

当サイト名を-(ハイフン)で囲っている3行のファイルです。

 

これら2つのファイルを使っていきます。

 

ファイル内の指定した文字列の"下の行"に別ファイルの文字列を挿入する。

例としてsedsample.txtの"4gyoume"という文字列の下にhayanased.txtの内容を挿入してみましょう。

 

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

sed '/4gyoume/r hayanased.txt' sedsample.txt

これは、"sedsample.txt"ファイルの中にある"4gyoume"という文字列が書いてある行の下(r)に"hayanased.txt"に書かれている内容を割り込ませてください。というコマンドです。

実行すると以下のような結果が返ってきます。

1gyoume
2gyoume
3gyoume
4gyoume
---------
HayanaLab
---------
5gyoume
hayana
end

4gyomeの下に当サイト名の"hayanased.txt"の3行全文が挿入されました。

 

ファイル内の指定した文字列の"上の行"に別ファイルの文字列を挿入する。

次はsedsample.txtの"4gyoume"という文字列の上の行にhayanased.txtの内容を挿入してみましょう。

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

sed '/4gyoume/e cat hayanased.txt' sedsample.txt

このコマンドは前述のコマンドとは少し異なり、「/4gyoume/e」の「e」の指示内容が異なる部分です。

“sedsample.txt"ファイルの中にある"4gyoume"という文字列が書いてある行の上にeの次に書き込んだコマンドの標準出力を割り込ませてください。というコマンドです。

※標準出力とはコマンド実行後に画面出力される文字列のことです。

その為、「e」の次は"hayanased.txt"だけでなくcatコマンドが必要です。

 

とりあえずこのコマンドの実行結果を見てみましょう。

1gyoume
2gyoume
3gyoume
---------
HayanaLab
---------
4gyoume
5gyoume
hayana
end

4gyomeの上にに当サイト名の"hayanased.txt"の3行全文が挿入されました。

 

catコマンドを使わないと以下のようになります。

$ sed '/4gyoume/e hayanased.txt' sedsample.txt
1gyoume
2gyoume
3gyoume
sh: 1: hayanased.txt: not found
4gyoume
5gyoume
hayana
end

「hayanased.txtってコマンドなんか無いんだけど~」と怒られている一文が"4gyoume"の上に挿入されてしまいます。

 

また、このコマンドを使えば他のコマンドの標準出力も挿入させることもできます。

lsコマンドの結果を"sedsample.txt"の"4gyoume"の上に割り込ませてみましょう。

$ sed '/4gyoume/e ls' sedsample.txt
1gyoume
2gyoume
3gyoume
hayanased.txt
sedsample.txt
sedsample.txt.org
4gyoume
5gyoume
hayana
end

正しく、lsコマンドの標準出力であるファイル一覧が"4gyoume"の上に割り込まれました!

 

今回はここまで!