
Я использую его 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