Назад | Перейти на главную страницу

Вставка длинной строки с помощью sed

Я пытаюсь использовать это выражение для вставки содержимого одного текстового файла в другой после заданной строки. Это простой сценарий bash:

    TEXT=`cat file1.txt`
    sed -i "/teststring/a \
    $TEXT" file2.txt

Это возвращает ошибку: "sed: -e выражение # 1, char 37: unknown command:` M '"

Проблема заключается в том, что содержимое file1.txt на самом деле является частным сертификатом, поэтому проблема возникает из-за большого количества текста и необычных символов. Если я заменю $ TEXT простым значением ASCII, он будет работать, но когда он прочитает большое содержимое file1.txt, он выйдет из строя с этой ошибкой.

Есть ли способ осуществить это действие? Мой синтаксис отключен от sed или неправильно размещены цитаты?

Используйте r для чтения файла сертификата, а не a для добавления строки - sed сбивает с толку, потому что вам сначала нужно экранировать символы новой строки и специальные символы в строке, которую нужно добавить. Вам не нужно экранировать какой-либо текст в файле - sed просто читает и добавляет его.

sed -i "/teststring/r file1.txt" file2.txt

я хотел бы использовать ed редактор. Это как vi но для командной строки.

Пример:

$ echo foobar > /tmp/orig
$ cat > /tmp/add << EOF
> blablabla
> blablabla
> blablabla
> EOF
$ printf "/foobar\n.r /tmp/add\nwq\n" | ed /tmp/orig
7
foobar
30
37
$ cat /tmp/orig
foobar
blablabla
blablabla
blablabla