正規表現が一致しない場合、「sed」が終了ステータスを返さないのはなぜですか?

正規表現が一致しない場合、「sed」が終了ステータスを返さないのはなぜですか?

ファイル内の特定の行を検索して置換しようとしていますが、実行時にその正規表現がsed一致しないとステータスコードが返されないため、sed条件を追加する代わりにgrepEnterメソッドがありますsedsed終了状態?

質問:

ここに画像の説明を入力してください。

ベストアンサー1

sed する戻り終了ステータス:

$ echo "foo" | sed 's/xx/yy/'
foo
$ echo $?
0
$ sed 's/xx/yy/' foo.txt
sed: can't read foo.txt: No such file or directory
$ echo $?
2

Sedの終了コードは、プログラムが正常に終了したかどうかに関連しており、実行中のジョブの内部とは無関係であり、コマンドが正常に実行されたかどうかのみが関係しますsed

つまり、GNU sedはこれを行う方法を提供します。

   q [exit-code]
          Immediately  quit  the sed script without pro‐
          cessing any more input, except that  if  auto-
          print  is  not  disabled  the  current pattern
          space will be printed.  The exit code argument
          is a GNU extension.

たとえば(からインポートここ):

$  echo "foo"|sed '/foo/ s/f/b/;q'                                                                       
boo
$  echo $?
0
$ echo "trash"|sed  '/foo/{s/f/b/;q}; /foo/!{q100}'
trash
$  echo $?
100

次の事実を報告したい場合どの入力のすべての行で交換が成功しました。予約済みスペースに正常な交換を表示し、最後の行で確認できます。

seq 6 | sed 's/4/four/;s/5/five/; tm;${x;/1/{x;q};x;q1};b;:m;x;s/.*/1/;x'

tmm交換が成功するとラベルに分岐します。ここに1最後の行で探す予約済みスペースを入れます。

おすすめ記事