Проблема в том, что sed
работает со строкой -за строкой -, поэтому ваш многострочный шаблон -никогда не будет совпадать. Если вы используете GNU sed
, вы можете использовать опцию -z
для работы со всеми строками в одном буфере :
sed -z 's/\*[^=]*=//g' filename.txt
Обратите внимание, что я также изменил ваш код. :Поскольку *
является жадным, он съест все строки до последней =
при использовании .*
, поэтому я изменил его на [^=]*
, который остановитесь на следующем =
.
Без опции -z
вам нужно собрать весь файл в один буфер самостоятельно. Обычно я собираю все в пространстве хранения и обмениваю пространство удержания и пространство шаблона на последнюю строку :
sed 'H;1h;$!d;x;s/\*[^=]*=//g'
H
добавляет каждую строку в пробел 1h
перезаписывает пробел текущей строкой, чтобы избежать добавления новой строки в начало файла $!d
удаляет все строки, кроме последней, и останавливает дальнейшую обработку этих строк x
и последующие выполняются только для последней строки и меняют местами оба пробела, поэтому весь файл, который был собран в резервном пространстве, теперь находится в пространстве шаблона