Ви можете використовувати q n, щоб вийти зі статусом виходу n - але для того, щоб зробити це корисним, вам також потрібно буде використовувати деякі розгалуження та контроль потоку :
t
відгалуження умовно (тобто: перейти до мітки), лише якщо 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
. Що таких рядків не було, не має значення, команда все-таки працювала.