Вы можете использовать q n для выхода со статусом выхода n - но для того, чтобы сделать это полезным, вам также нужно будет использовать некоторые функции ветвления и управления потоком :
т
ветвь условно (то есть: переход к метке) , только если s///
команда преуспела с момента последней строке ввода был прочитан или другой условный переход был взят.
Вероятно, лучше выбрать значение для n , которое отличается от одного из стандартных значений состояния выхода:
Нулевое состояние выхода указывает на успех, а ненулевое значение указывает на сбой. GNU 'sed' возвращает следующие значения ошибки состояния выхода:
0
Successful completion.
1
Invalid command, invalid syntax, invalid regular expression or a
GNU 'sed' extension command used with '--posix'.
2
One or more of the input file specified on the command line could
not be opened (e.g. if a file is not found, or read permission is
denied). Processing continued with other files.
4
An I/O error, or a serious processing error during runtime, GNU
'sed' aborted immediately.
Так например
$ echo "foo.bar" | sed 's/bar.*$//; t; q42' ; echo $?
foo.
0
в то время как
$ echo "foo.bar" | sed 's/baz.*$//; t; q42' ; echo $?
foo.bar
42
Если вы хотите опустить печать по умолчанию пространства шаблона, то замените qна Q(обратите внимание, что Qэто расширение GNU).
sedнаверняка имеет статус выхода, он просто не делает то, что вам нужно здесь. Еслиsedкоманда не выполнена, например, если вы попытаетесь запустить ее для файла, к которому у вас нет прав на запись или который не существует,sedпроизойдет выход со статусом выхода, отличным от 0. Статус выхода просто указывает,sedудалось ли вам выполнить то, что вы ему сказали, иecho "foo.bar" | sed 's/pop.*$//'был ли он правильно выполнен. Он удалил все строки сpop. То, что таких строк не было, не имеет значения, команда все еще работала.