Операторы [[
и ]]
предназначены для явных сравнительных тестов. Если вы хотите проверить два результата команды , просто используйте оболочку:
$ if /usr/bin/pgrep -fq "/home/tiger/bin/pymp" || /usr/bin/pgrep -fq "/usr/bin/mpv2" ; then do_stuff; fi
Не все версии pgrep
поддерживают аргумент -q
для подавления вывода. Если это ваш случай, вы можете подавить каждое pgrep
по отдельности или комбинировать перенаправление:
$ if { /usr/bin/pgrep -f "/home/tiger/bin/pymp" || /usr/bin/pgrep -f "/usr/bin/mpv2";} > /dev/null 2>&1 then do_stuff; fi
или
$ if /usr/bin/pgrep -f "/home/tiger/bin/pymp" > /dev/null 2>&1 || /usr/bin/pgrep -f "/usr/bin/mpv2" > /dev/null 2>&1 ; then do_stuff; fi
Проблемы дальности упрощаются, если рассматривать их в обратном порядке. В конце просто не забудьте еще раз повернуться вспять, чтобы сохранить гармонию во Вселенной.
Использование оператора диапазона ,
увеличит количество регулярных выражений, но улучшит читаемость.
tac file_name |
sed -e '
/use output/,/implicit/!b
/use output/{h;d;}
/implicit/G
' |
tac ;
Без обращения к оператору диапазона. Минимизирует количество регулярных выражений за счет сложности кода.
tac file |
sed -e '
/use output/!b
$q;h;N;s/.*\n//
:loop
n
/implicit/!bloop
G
' |
tac ;
В случае, если утилита tac
отсутствует, мы все еще можем сделать это в sed
, но теперь мы не можем печатать, пока не увидим строку «use output», потому что мы не знаем, что другой «неявный "строка может быть до этого.
sed -n '
/implicit/!bp
h
:loop
${g;bp;}
n
/implicit/{x;p;bloop;}
H
/use output/!bloop
G;s/\n[^\n]*$//
:p;p
' file