Попробуйте:
sed '2i echo test > /var/tmp/file' infile
2i
говорит вставить текст во вторую строку.
ваше собственное решение также должно работать, но поскольку в вашем тексте есть /
, которые вы хотите добавить, и сам sed
также использует символ /
для замены символа, поэтому они будут конфликтовать друг с другом.
У вас есть два способа это исправить:
изменить символ замены sed /
на что-то другое, чего нет во входном файле:
sed '2 s:^:echo test > /var/tmp/file\n:' infile
избежать всех /
символов из вашего текста, который вы собираетесь добавить в свой файл.
sed '2 s/^/echo test > \/var\/tmp\/file\n/' infile
добавьте переключатель -i
для замены места -в вашу команду, когда вы будете довольны результатом.
sed -i '2 s/^/echo test > \/var\/tmp\/file\n/' infile
При этом нет необходимости экранировать какие-либо символы. Команда чтения файла r
поместит содержимое файла после указанного номера строки, в данном случае после Ине #1.
$ echo 'echo test > /var/tmp/file' \
| sed -i '1r /dev/stdin' file