Вы можете сделать это с помощью любого sed
, нет необходимости засовывать весь файл в память, просто используйте классический N;P;D
цикл и ветвление:
sed ':b;$!N;s/\nSSL/:SSL/;tb;P;D' infile
Это втягивает N
ext строку, пытается s
ubstitute - если успешно, то ветвится обратно к :b
, иначе P
rints и затем D
eletes до символа новой строки, перезапуская цикл.
Не могли бы вы сделать что-то подобное в подоболочке?
cat <(cat * / foo / *; cat * / bar / * / baz;)
find
феноменально эффективен, пожалуйста, объясните немного подробнее о том, чего вы пытаетесь достичь, поскольку может быть гораздо более простой ответ.
Это определенно возможно сделать на уровне VFS, например с использованием ПРЕДОХРАНИТЕЛЯ .
В частности, concat-fuse очень похож на то, что вам нужно:
concat-fuse - это виртуальная файловая система на основе FUSE для Linux, которая позволяет обрабатывать коллекцию файлов, как если бы они были одинокий. По сути, он выполняет:
cat * .txt> large_file
Но вместо создания large_file он создает виртуальный файл и обращается к исходным файлам * .txt.