Вы можете использовать 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
. То, что таких строк не было, не имеет значения, команда все еще работала.