Если ваш сервис можно активировать через сокет, вы можете использовать Accept=yes
в блоке сокетов. Тогда новый экземпляр вашей службы будет выполняться для каждого соединения и останавливаться при закрытии сокета.
Для редактирования файла используйте текстовый редактор с поддержкой сценариев, например Ed или Ex(оба редактора POSIX ). Синтаксис очень похож.
printf '%s\n' '/^import matplotlib as mpl$/d' 's/mpl/plt' 'w' 'q' | ed -s file
printf '%s\n' '/^import matplotlib as mpl$/d' 's/mpl/plt' 'x' | ex file
printf '%s\n'
передает команды редактору.
/^import matplotlib as mpl$/d
удаляет первую строку, соответствующую шаблону.
s/mpl/plt
выполняет замену на следующей строке.
w
и q
или x
сохраняют изменения.
Если ты действительно хочешь Сэда,
sed '/^import matplotlib as mpl$/N; s/.*\nmpl/plt/' file
Ответ на ваш расширенный вопрос:
find /path/to/dir/ -type f -exec sh -c '
printf "%s\n" "/^import matplotlib as mpl\$/d" "s/mpl/plt" "w" "q" |
ed -s "$1"' sh {} \;
Если это не обязательно sed
, вы можете использовать awk
для задачи:
awk '$0=="import matplotlib as mpl" {buf=$0; next}
buf {if (/^mpl\.style\.use/) {sub(/^mpl/,"plt")} else {print buf}; buf=""} 1' inputfile
import matplotlib as mpl
, она сохранит ее в буфере buf
и пропустит выполнение до следующей строки. mpl.style.use
, она заменит эту часть текущей строки на plt.style.use
и отбросит содержимое буфера. Если вам требуется более точное соответствие второй строки, измените второе правило на
buf {if ($0=="mpl.style.use(mpl_plt_default_template)" {sub(/^mpl/,"plt")} else {print buf}; buf=""}