Поиск и замена в VIM для исправления разрывов строк

Проблема в том, что sedработает со строкой -за строкой -, поэтому ваш многострочный шаблон -никогда не будет совпадать. Если вы используете GNU sed, вы можете использовать опцию -zдля работы со всеми строками в одном буфере :

.
sed -z 's/\*[^=]*=//g' filename.txt

Обратите внимание, что я также изменил ваш код. :Поскольку *является жадным, он съест все строки до последней =при использовании .*, поэтому я изменил его на [^=]*, который остановитесь на следующем =.

Без опции -zвам нужно собрать весь файл в один буфер самостоятельно. Обычно я собираю все в пространстве хранения и обмениваю пространство удержания и пространство шаблона на последнюю строку :

.
sed 'H;1h;$!d;x;s/\*[^=]*=//g'
  • Hдобавляет каждую строку в пробел
  • 1hперезаписывает пробел текущей строкой, чтобы избежать добавления новой строки в начало файла
  • $!dудаляет все строки, кроме последней, и останавливает дальнейшую обработку этих строк
  • xи последующие выполняются только для последней строки и меняют местами оба пробела, поэтому весь файл, который был собран в резервном пространстве, теперь находится в пространстве шаблона
0
12.08.2021, 12:36
0 ответов

Теги

Похожие вопросы