У меня есть куча команд sed в командном файле, который я запускаю, используя -f.
/PATTERN1 /I,/;/s/^[ \t]*//g
/PATTERN1 /I{:a;/;/!N;s/\n/ /;ta;P;D}
s/\(PATTERN1\) \([ \tA-Za-z0-9,\"\']*\)(\(.*\))[ \t]*;[ \t]*$/\1 \2\3;/I
Если я запускаю
gsed -f sed-file.sed input-file
, кажется, что, поскольку существует несколько строк с одинаковым шаблоном, он запускается первым и игнорирует остальные. Если я закомментирую строки одну за другой, они отлично работают в файле самостоятельно, но если я запускаю их без комментария, он обрабатывает только первое совпадение.
Мой пример файла входного файла
not (this line);
pattern1 some text, ( some other text (5), some other text (6));
pattern1 this text
(
that text (6),
that text (7),
);
not this text either;
Мне бы хотелось, чтобы это выглядело так
not (this line);
pattern1 some text, some other text (5), some other text (6);
pattern1 this text that text (6), that text (7), ;
not this text either;
Итак, если я оставлю все строки в файле sed без комментариев (как указано выше), то получу:
not (this line);
pattern1 some text, ( some other text (5), some other text (6));
pattern1 this text ( that text (6), that text (7), );
not this text either;
Если я закомментирую первые 2 строки, я получу
not (this line);
pattern1 some text, some other text (5), some other text (6);
pattern1 this text
(
that text (6),
that text (7),
);
not this text either;
Где в первой строке с pattern1 правильно удалены окружающие скобки.
Если я закомментирую только первую строку, я получу
not (this line);
pattern1 some text, ( some other text (5), some other text (6));
pattern1 this text ( that text (6), that text (7), );
not this text either;
Где строки, совпадающие с pattern1, объединяются вплоть до точки с запятой, но окружающие скобки больше не удаляются.
И если я закомментирую последнюю строку, я получаю то же самое, но пробелы не удаляются ...
not (this line);
pattern1 some text, ( some other text (5), some other text (6));
pattern1 this text ( that text (6), that text (7), );
not this text either;
И если я закомментирую последние 2 строки, я получаю:
not (this line);
pattern1 some text, ( some other text (5), some other text (6));
pattern1 this text
(
that text (6),
that text (7),
);
not this text either;
Где пробелы правильно удаляются в начале строк с pattern1 и заканчивая точкой с запятой.
Как я могу убедиться, что все 3 seds обработаны по порядку, но использовать одну команду? Или мне придется управлять ими отдельно?