LINUX.ORG.RU

sed


0

1

Пытаюсь добавить столько же пробелов в пустую строку, сколько и у предыдущей перед текстом. Не получается.

sed -e 's%\([[:blank:]]*\)\(.*\)\n[[:blank:]]*$%\1\2/n\1%'

Пример текста секретен? с трудом представляю что надо сделать

«у предыдущей перед текстом» это не ^[[:blank:]]+

psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

Например, так (номера строк добавлены для лучшей читаемости):

1:___struct message *msg;
2:
--------------------------
1:___struct message *msg;
2:___

Добавил ^, тоже не работает:

sed -e 's%^\([[:blank:]]*\)\(.*\)\n[[:blank:]]*$%\1\2/n\1%'

dimorphus
() автор топика

В s-выражение перевод строки? И как sed будет строки выделять? Вот, допустим такой вариант:

echo -e «__EE\n\n\n\n___W W\n» | sed -n 's/^$//;ta;h;p;b;:a;g;s/^\([_]*\)[^_]*$/\1/p'

Для удобства здесь вместо пробела символ «_», поймёте как работает, поправите.

mky ★★★★★
()
Ответ на: комментарий от dimorphus

что бы именно твой скрипт работал, надо сначала склеить все строки в одну (заменить перевод каретки на некую комбинацию не встречающуюся в тексте) применить твой регекс глобально, и опять восстановить символ перевода строки.

psv1967 ★★★★★
()
Ответ на: комментарий от mky

Спасибо, разобрался: sed -n -e 's/^[[:blank:]]*$//;ta;h;p;b;:a;g;s/^\([[:blank:]]*\).*$/\1/p'

dimorphus
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.