Я создал дерево каталогов и файлов, что приведет к следующей ситуации:
$ cat $(find a -type f)
EFabcd
EFbacA
QuuxQuuxr
Foobar
abcd
Затем, используя sed, я думаю, что я нашел решение для того, что вы ищете:
$ sed -n 'H;${x;s/d\nEF/FOO/;p;}' $(find a -type f)
Как это работает? Сначала мы подавляем вывод sed с помощью -n
. Затем приходит команда. Для каждой строки мы добавляем новую строку и ее содержимое в область удержания:
H
В конце файла он переносит содержимое пространства удержания в пространство шаблона (где можно выполнить замену):
x
После этого у нас все содержимое всех файлов рассматривается как единственная строка. Теперь мы можем заменить шаблон, который также включает новую строку, например:
s/d\nEF/FOO/
После замены мы печатаем результат:
p
Результат:
$ sed -n 'H;${x;s/d\nEF/FOO/g;p;}' $(find a -type f)
EFabcFOObacA
QuuxQuuxr
Foobar
abcd
(Обратите внимание, что в начале результата есть пустая строка. Я считаю, что ее также легко исправить).
Что-то вроде этого вы ищете?