Вырезать длинную строку из скрипта (с наименьшими трудозатратами)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
mnts
Сообщения: 9
ОС: Arch

Вырезать длинную строку из скрипта

Сообщение mnts »

Есть скрипт:

Код:

... ./configure --foo \ # foo foo --bar --baz \ # --foo-bar --end ...


Как проще всего вытянуть из него всю описанную строку (с учетом переносов "\"), т.е. имеется в виду получить на выходе ./configure --foo --bar --baz --end?

Что-то не очень хочется в лоб читать строки, отсекать комменты, смотреть последний символ...
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Вырезать длинную строку из скрипта

Сообщение allez »

В первом приближении можно так попробовать:

Код: Выделить всё

sed 's/\#.*//g; s/\\//g; /^$/d' script.sh | tr -d "\n"
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Вырезать длинную строку из скрипта

Сообщение sash-kan »

1. удаление стоящего в конце строки бэкслэша вместе с символом перевода строки.
2. удаление стоящей внутри строки последовательности бэкслэш плюс пробел вместе с оставшимися символоми и переводом строки.

Код: Выделить всё

sed 's/\\$\|\\ .*$//;t a;b b;:a N;:b s/\n//'

p.s. конечно, можно оптимизировать.

upd.
3. удаление строк, начинающихся с решётки и идущих после одной из строк, подпадающих под условия 1 или 2.

Код: Выделить всё

sed ':a s/\n#.*$//g;s/\\$\|\\ .*$//;t b;b c;:b N;b a;:c s/\n//g'


upd 2. вывернул наизнанку. чуть короче получилось.

Код: Выделить всё

sed 'b b;:a N;:b s/\n#.*$//g;s/\\$\|\\ .*$//;t a;s/\n//g'


drBatty, как считаете, можно ещё сократить/оптимизировать?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали: