LINUX.ORG.RU

sed: очистить/удалить предыдущую/следующую строку по условию

 ,


0

3

Здравствуйте! Просьба помочь выполнить следующую задачу: Необходимо написать однострочники sed, реализующие следующие функции:

  • Если строка содержит текст, удалить следующую строку;
  • Если строка содержит текст, очистить следующую строку;
  • Если строка содержит текст, удалить предыдущую строку;
  • Если строка содержит текст, очистить предыдущую строку.

Понимаю, что для этой цели нужно использовать конструкцию вида:

sed -e ":a;/IF/N;s/THEN$/\n/g;ta;"
или что-то подобное, но не понимаю, как это сделать, особенно удаление. В случае с удалением, я пытаюсь использовать невидимый символ x0D, который удалиться в следующем пайпе, например:
sed -e ":a;/-$/N;s/\x0A.\+$/\x0D/g;ta;"
данный однострочник удалит следующую строку, если строка заканчивается на "-", но получается как-то коряво.

PS: прошу прощения, сейчас нет linux под рукой, использую unixutils.


я пытаюсь использовать невидимый символ x0D, который удалиться в следующем пайпе

лучше использовать hold buffer, манипуляции с которым осуществляются командами h/H, g/G, x

salsa
()

1 и 4:

sed -n 'p; /text/n'
sed '1{h; d}; /text/!{x; b}; x; с\'

два text подряд не переживает

Если условия более сложные, то, наверное, лучше взять перл. Там хоть тернарные операторы есть. Под офтопик отлично работет ActivePerl, если что.

Jini ★★
()
Последнее исправление: Jini (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.