Как удалить весь текст с начала строки с определенной строкой

Как удалить весь текст с начала строки с определенной строкой

Я использую его sed -n '/string/,$p' file >> otherfileдля копирования текста из строки с определенной строкой в ​​другой файл.

Теперь я хочу, чтобы скопированный текст был удален в исходном файле. Я пробовал разные методы с sed и awk, но ничего не сработало.

Как использовать sed для удаления текста файла с начальной строки, содержащей определенную строку?

texta

texta1

textb    <- string, delete rest of the text from here

textb1

textc

textc1

или будет проще вырезать вместо копирования с помощью sed и какая команда будет вместо этого?

решение1

Ты можешьжзаписать указанный диапазон строк в новый файл, а затемгудалить диапазон - хитрая часть заключается в том, чтобы не допустить dобработки команды как части имени выходного файла. В GNU sed вы можете сделать это, разделив запись и удаление на отдельные выражения, используя-e

ВАЖНОЕ ПРИМЕЧАНИЕ: это приведет к усечению, otherfileа не добавлению

sed -i.bak -e '/string/,${w otherfile' -e 'd;}' file

решение2

Или используйте ed!

ed -s file <<< $'/textb/,$w otherfile\n/textb/,$d\nw\nq'

Учитывая ваш вкладфайлиз:

texta

texta1

textb    <- string, delete rest of the text from here

textb1

textc

textc1

После выполнения edкоманды,файлстановится:

texta

texta1

(в конце есть пустая строка, которая исчезает при форматировании); идругойфайлсодержит:

textb    <- string, delete rest of the text from here

textb1

textc

textc1

Команды edследующие:

  • /textb/,$w otherfile-- записать этот диапазон строк вдругойфайл
  • /textb/,$d-- удалить этот диапазон строк
  • w-- записать измененный файл на диск
  • q-- бросил

решение3

Если вы используете эту команду sed -n '/string/,$p' file >> otherfileдля извлечения всех строк из одногосодержащий stringв конец файла ( $) в другой файл.

Самый простой способ извлечь дополнение — это дополнить соответствие:

sed '/string/,$d' file >> someOtherDifferentFile

А если вы хотите/нужно обновить исходный файл, просто скопируйте результат обратно.

Именно это и -iделает опция sed, так что она обновит исходный файл:

sed -i.bak '/string/,$d' file

Связанный контент