sedで置換処理が行われなかった場合に終了ステータスを0以外にする方法

Bash,Linux

はじめに

sed コマンドで s 内部コマンドを使って置換処理を行った場合、
条件に該当する文字列が見つからず置換が行われなかったとしても、終了ステータス $?0 になります。

実際に置換されたのか?置換されなかったのか?を終了ステータス $? で判定する方法について紹介します。

検証環境

$ uname -moi
x86_64 MacBookPro11,4 Darwin

$ sed --version | head -n 1
sed (GNU sed) 4.8

準備

サンプルテキストデータ

動作確認のために置換処理に利用するテキストファイル ( test.txt ) を作成します。

cat <<EOF >test.txt
この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。
EOF

sedで置換が行われた場合、行われなかった場合の終了コードを確認

sedで 置換が行われた場合 の終了ステータスを確認してみます。

$ sed 's/ダミー//' test.txt
この文章はです。文字の大きさ、量、字間、行間等を確認するために入れています。

$ echo $?
0

sedで 置換が行われなかった場合 の終了ステータスを確認してみます。

$ sed 's/ジミー//' test.txt
この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。

$ echo $?
0

いずれの場合も、終了コード $?0 となっています。

sedで置換が行われたなかった場合の終了コードを 0 以外にする

先程の sed コマンドを多少変更することで、終了コードを 0 以外に変更できます。
ポイントは先程の sed コマンドの後方に t; q100; というコマンドが追加されている点です。
これにより、置換処理が行われなかった場合は終了ステータス $?100 となります。

sedで 置換が行われた場合 の終了ステータスを確認してみます。

$ sed 's/ダミー//; t; q100;' test.txt
この文章はです。文字の大きさ、量、字間、行間等を確認するために入れています。

$ echo $?
0

sedで 置換が行われなかった場合 の終了ステータスを確認してみます。

$ sed 's/ジミー//; t; q100;' test.txt
この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。

$ echo $?
100

ひとこと

sed で置換が行われたのか?あるいは空振りしたのかの判断を行いたい場合にご利用ください。

Bash,Linux