スクリプト等を変更する際、変更行をコメントアウトで残しておいて、
変更後の行を挿入することがよくあります。こういう時に便利なコマンドです。

変更対象のファイル:target.sh
#!/bin/bash
echo "-------teststart!!!-------"
echo "target1"
echo "target2"
echo "target3"
echo "-------testend!!!-------"
exit 0

変更後のファイル:target.sh

#!/bin/bash
echo "-------teststart!!!-------"
echo "target1"
echo "target4"
#echo "target2"
echo "target3"
echo "-------testend!!!-------"
exit 0
 
変更実行コマンド:
sed -e "/^echo \"target2/s/^/#/" -e "/^#echo \"target2/iecho \"target4\"" -i.bak target.sh

解説:
ピンク色の箇所がコメントアウト対象行。黄色の箇所が挿入行。
sedコマンドの1つ目の-eで実行しているコマンドは、
条件「echo "target2で始まる行」に当てはまる行の「行頭を#にする」という意味です。
正規表現で行頭は^と書きます。
sedコマンドで2つ以上コマンドを実行する場合はいくつか方法があります。
-eをその都度指定する。複数コマンドを{}で括る(その場合、各コマンドは;で区切る)。sedスクリプトファイルに記載する。等の方法があります。
2つ目のコマンドは、
条件「#echo \"target2で始まる行」に当てはまる行の前に「echo "target4"を挿入する」という意味です。

余談:
前にもsedコマンドの解説をしましたが、個人的にsedやawkとかエディタ系が好きなので今後も多くなりそうです。
参考書籍:Linuxコマンドポケットリファレンス

この記事が参考になりましたら、他の方へもシェアしていただけると嬉しいです。

スポンサードリンク