Даже если вам не нравятся седые sed и perl, вы все равно можете найти симпатию к серому awk. Этот ответ кажется тем, что вы ищете. Я воспроизвожу его здесь. Скажем, у вас есть три файла и вы хотите заменить needle на replacement в haystack:
awk ' BEGIN { RS="" }
FILENAME==ARGV[1] { s=$0 }
FILENAME==ARGV[2] { r=$0 }
FILENAME==ARGV[3] { sub(s,r) ; print }
' needle replacement haystack > output
. Это не связано с регулярными выражениями и поддерживает символы новой строки. Кажется, он работает с достаточно большими файлами. Это связано с разрывом всего файла в памяти, поэтому он не будет работать с файлами произвольного размера. Если вы хотите, чтобы он был более изящным, вы можете вложить весь shebang в сценарий bash или превратить его в скрипт awk.