Я пытаюсь использовать это выражение для вставки содержимого одного текстового файла в другой после заданной строки. Это простой сценарий 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