Вы можете сделать это, но вы не можете отправлять команды через перенаправление или обычный файл.
When an error occurs, if ed's input is from a regular file or here document, then it exits, otherwise it prints a '?' and returns to command mode.
Одна из двух команд завершится ошибкой, так как слово в файле не может соответствовать обоим шаблонам, поэтому ed
завершает работу --либо в строке 1, потому что оно не соответствует, либо в строке 2, потому что это не соответствует (и поэтому выход до сохранения измененного файла ).
Команды будут работать (минус обратная косая черта и суффиксы )через стандартный ввод:
printf '%s\n' 's/heads/1/' 's/tails/-1/' 'wq' | ed -s coin.txt
Вы получите ?
в stderr, потому что s/heads/1/
не удалось (, который вы могли бы перенаправить ), но все замены происходят, как и ожидалось.
Обратите внимание, что я удалил завершающую команду .
, так как команды q
достаточно для выхода из ed
.
Обходной путь, опубликованный ed (1 )Conference в Twitter ,:
g/heads/s//1/
g/tails/s//-1/
wq
или без сокращений в части s///
:
g/heads/s/heads/1/
g/tails/s/tails/-1/
wq
Эти варианты работают, потому что команды g
не завершатся ошибкой, даже если замены не выполняются.
Причина была в том, что у меня были старые БД MYSQL (для 8.0 )в /var/lib/mysql
. После того, как я удалил их, я смог это сделать.