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

echo "col1|col2|col3+++++++++++A|1|a B|2|b C|3|c D|4|d  (3 rows)" |sed -e 's/.*\++//; s/d .*/d/; s/|\(.\)|\(.\)\s*/ \1 \2\n/g'

A 1 a
B 2 b
C 3 c
D 4 d
0
22.01.2019, 15:10
3 ответа

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

ВАЖНОЕ ПРИМЕЧАНИЕ :это усекает otherfile, а не добавляет к нему

sed -i.bak -e '/string/,${w otherfile' -e 'd;}' file
3
28.01.2020, 02:16

Или используйте 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--уволился
2
28.01.2020, 02:16

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

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

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

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

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

sed -i.bak '/string/,$d' file
0
28.01.2020, 02:16

Теги

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