Программное обеспечение для создания музыки для Linux

sed '/\n/P;//!s/_\.[^ ("]*Text([^)]*)/\n&\n/;D' files... >results.txt

... наверное, сработает. Запустите свой пример данных, которые он напечатает:

_.Text("Hello World!")
_.Text("Foo")
_.ActionText("Bar")

Все, что он делает, это пытается заключить первое совпадение в строку в \ n ewlines. Независимо от того, удастся ли ему это, D удаляет до первой \ n ewline в пространстве шаблонов - что для несоответствующей строки полностью удаляет ее из вывода, но для совпадения удаляет только до головы вашего шаблона, и сценарий начинается снова сверху. Если \ n ewline соответствует в пространстве шаблонов - что может произойти, только если совпадение было только что найдено, а затем выбрано D , то sed печатает только до первая встречающаяся \ n строка в пространстве шаблонов, которая находится в конце вашей совпадающей строки. Учреждение s /// - ! не выполняется, когда в пространстве шаблонов уже есть \ n ewline, поэтому команда D elete очищает уже напечатанное совпадение, и цикл начинается снова с конца последнего матч дальше.

В зависимости от вашего sed вам может потребоваться использовать буквальную \ n ewline вместо n в правом поле подстановки. Но вы должны иметь возможность использовать все аргументы файла одновременно - или, по крайней мере, очень много одновременно (в зависимости от ваших ограничений ARGMAX) . Вы можете просто использовать glob в оболочке или, возможно, сделать ...

find /path -name pattern -exec sed script_above {} + >>results.txt

... потому что sed будет обрабатывать все входные файлы как единый поток.

3
12.01.2018, 01:36
1 ответ

Я действительно могу порекомендовать Tracktion Waveform. Вы можете использовать его предшественника Tracktion 7 бесплатно.

-1
27.01.2020, 21:25

Теги

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