for n in $(seq $#); do
printf "%s\n" "$n"
eval echo argument at $n: \$$n
done
Пользователь richard очень хорошо описывает, что не так с вашей командой sed
, а также дает правильный сценарий редактирования для выполнения действия, которое вы пытаетесь выполнить.
Я предлагаю альтернативный подход, который будет работать в нескольких различных случаях:
Команда sed
r
вставит содержимое файла в текущую позицию в потоке данных.
В командной строке sed
можно написать
$ sed '115r /dev/stdin' index.html <data.in
, что даст тот же эффект, что и sed '115r data.in' index.html
.. ..если данные, которые вы хотели вставить после строки 115, были сохранены в файле data.in
.
/ dev / stdin
- это специальный файл, содержащий все, что отправлено через стандартный ввод.
Вы также можете сделать (с оболочками, поддерживающими "здесь-строки"):
$ sed '115r /dev/stdin' index.html <<<"my string of stuff"
или
$ sed '115r /dev/stdin' index.html <<<"$myvariableofwonder"
Это также работает, как ожидалось, с конвейером из других команд, очевидно:
$ sed -n '1,10p' myfile | sed '115r /dev/stdin' index.html
Это трансплантирует строки с 1 по 10 из myfile
в index.html
в строке 115.
Поскольку "
не является командой sed
. Как сказано в сообщении об ошибке, хотя и не очень ясно.
Адрес 115
должен быть затем следует команда sed
, возможно, i
"
s. Те, что находятся вокруг <
и после >
/
s, они не нуждаются в экранировании. i
просто принимает текст. Осталось: sed '115 i '