вставка содержимого файла в середину другого файла с использованием bash - PullRequest
1 голос
/ 30 сентября 2019

Предположим, у меня есть 3 текстовых файла

file1

this is
some 
text
-------

file2

this is
another
pretty 
text
--------

file3

a
b
%file1%
d
e
x
y
%file2%
...

Я хотел бы вставить содержимое file1 и file2 в file3, чтобы заменить их соответствующие «маркеры». Маркеры могут быть в любом месте в файле3.

По какой-то причине у меня это не работает.

a=`cat file1'
cat file3 | sed "s/%file1%/\"$a\"/"

Я получаю следующую ошибку

sed: unrecognized option '--------'

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Это может работать для вас (GNU sed):

sed 's/^%\(.*\)%/cat \1/e' file3

Это вставит файлы с именами между % в file3.

1 голос
/ 30 сентября 2019

Вы можете использовать awk, чтобы прочитать все три файла и обновить маркеры: -

awk '
        FILENAME ~ /file1/ {
                f1 = f1 ? f1 RS $0 : $0
                next
        }
        FILENAME ~ /file2/ {
                f2 = f2 ? f2 RS $0 : $0
                next
        }
        /%file1%/ {
                $0 = f1
        }
        /%file2%/ {
                $0 = f2
        }
        1
' file1 file2 file3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...