Как избежать специальных символов в длинной строке sed

for n in $(seq $#); do
      printf "%s\n" "$n"
      eval echo argument at $n: \$$n
done
1
19.01.2017, 17:58
2 ответа

Пользователь 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.

2
27.01.2020, 23:16

Поскольку " не является командой sed . Как сказано в сообщении об ошибке, хотя и не очень ясно.

Адрес 115 должен быть затем следует команда sed , возможно, i

  • Затем избавьтесь от некоторых из " s. Те, что находятся вокруг < и после >
  • . Тогда не экранируйте / s, они не нуждаются в экранировании.
  • Тогда ничего не экранируйте, поскольку команда i просто принимает текст.

Осталось: sed '115 i '

3
27.01.2020, 23:16

Теги

Похожие вопросы