Сед добавляет х27 вместо одинарной кавычки - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь заменить строку текста одинарной кавычкой, используя /x27 в моем маршрутизаторе для повторной настройки параметров Wi-Fi.

Команда, которую я использую

sed -i 's/option ssid.*/option ssid \x27test\x27/g' /some/file

Вывод после выполнения вышеупомянутой команды на моем компьютере (Ubuntu 18)

option ssid 'test123'

Вывод после того, как я выполнил указанную выше команду на моем маршрутизаторе

option ssid x27test123x27

Ожидаемый вывод должен быть

option ssid 'test123'

Так что мой код не работает должным образом на маршрутизаторе.Как мне добиться этого с помощью / x27?Примечание: я выполняю этот сценарий в сценарии оболочки, и \ x27test \ x27 на самом деле \ x27 $ OPTARG \ x27

Мой полный код можно найти здесь

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

В комментарии вы сказали, что ваш реальный код:

sed -i 's/option ssid.*/option ssid '"'"'"'$OPTARG'"'"'"'/g'

Это должно быть написано более правильно и кратко, как:

sed -i 's/\(option ssid\).*/\1 '"'$OPTARG'"'/g'

Посмотрите:

$ echo 'hi option ssid question' | sed 's/\(option ssid\).*/\1 '"'$RANDOM'"'/'
hi option ssid '5203'

Учитывая ваше мнение о другом ответе звучит так, будто версия sed, которую вы используете, требует имя файла резервной копии между -i и s/....В противном случае в вашем скрипте оболочки где-то есть ошибка, или $OPTARG содержит косые черты или обратные ссылки.

0 голосов
/ 20 декабря 2018

Вы можете дважды заключить в кавычки вашу команду sed и затем использовать одинарные кавычки внутри:

sed -i "s/option ssid.*/option ssid 'test'/g" /some/file
...