2014-10-13 2 views
0

Я пытаюсь сделать простую замену скрипту адреса IPv4.Неизвестный вариант 's' в сценарии sed

Вот мой код.

#!/bin/sh 

sed 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/192.100.100.100/g/' 

То, что происходит каждый раз, когда я называю:

example.sed example1 > example.output 

я получаю:

sed: -e expression #1, char 75: unknown option to `s' 

, где 75-й символ является 1 из 192.100.100.100.

Почему?

+0

Это не дубликат, но в случае, если вы отправили сообщение об ошибке в сообщение об ошибке, обычная причина в этом связанном вопросе: http://stackoverflow.com/questions/9366816/sed-unknown-option-to-s – tripleee

ответ

3

Оставьте нижнюю косую черту!

sed -e \ 
    's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/192.100.100.100/g' 

(Разделение на две строки пытается обеспечить видимость конца строки.)

Обратите внимание, что sed начинает отсчет в s в начале s/// строки, а не в начале слово sed. Конечный / был в символе 75 в этой строке.

Полный сценарий, вероятно, следует добавить «все аргументы командной строки» (ака "[email protected]") тоже:

sed -e \ 
    's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/192.100.100.100/g' \ 
    "[email protected]" 

Это будет читать файлы, если они указаны (а также будет принимать дополнительные команды редактирования, такие как -e 's/.*//' !) или стандартный ввод, если аргументы не указаны. Вы можете поместить все это в одну строку в свой скрипт; перерывы для улучшения ясности при переполнении стека.

+0

Ну, это неловко. Спасибо за помощь. Я попробовал это, и моя оболочка просто зависает после ввода моей команды файла. Есть идеи? – MipsMoreLikeWhips

+2

Он ждет вас, чтобы ввести данные? Попробуйте control-D; он должен выйти из 'sed', а не из вашей оболочки. –

+0

«Обратите внимание, что sed начинает отсчет с s». Это имеет смысл. Хорошо, еще раз спасибо! – MipsMoreLikeWhips