sedで置換処理が行われなかった場合に終了ステータスを0以外にする方法
Contents
はじめに
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
で置換が行われたのか?あるいは空振りしたのかの判断を行いたい場合にご利用ください。
ディスカッション
コメント一覧
まだ、コメントがありません