Я получаю:
sed: -e expression #1, char 46: unterminated `s' command
По этому коду:
sed -i.bak -c 's|net.ipv4.ip_forward.*|net.ipv4.ip_forward = 1|' /etc/sysctl.conf
Мой редактор показывает, что символ 46 находится между специальными символами .*.
Я работаю на машинах с CentOS 5-6.5.
Изменение разделителя не помогло, как и использование " вместо ', и код, похоже, работает на терминале Linux Mint 17.3, без -c. Я думаю, что он может интерпретировать . или * не как специальный символ.
Я пытался :
sed 's/net.ipv4.ip_forward.*/net.ipv4.ip_forward = 1/' /etc/sysctl.conf
Это заняло 10 минут и ничего не дало, поэтому я остановил это. Работает на Mint 17.3.
решение1
Проблема была в том, что мой редактор был глупым, и я думал, что это перенос слов.
Когда я ставлю
sed -i.bak -c 's|net.ipv4.ip_forward.*|net.ipv4.ip_forward = 1|' /etc/sysctl.conf
В редакторе "/etc/sysctl.conf" касался края окна, поэтому отображал его часть на следующей строке. Я думал, что это просто перенос слов, но нет. Centos или nano решили, что "/etc/sysctl.conf" следует поместить на новую строку, если я загружаю файл или копирую в него код. Я вручную удалил новую строку, и она работает нормально.
Редактировать: Всякий раз, когда я использую nano и нажимаю /, пока текст приближается к концу окна, он решает перенести его на новую строку, werid. Это действует как перенос слов, но вместо этого просто все ломает.
Там, откуда я ее загружаю, этой новой строки не существует.