Sed не может работать в файле сценария в Windows - PullRequest
1 голос
/ 01 ноября 2010

Однажды я написал простую команду sed, такую ​​как

s/==/EQU/

, пока запускаю ее в командной строке:

sed 's/==/EQU' filename

она работает хорошо, заменив '==' на 'EQU ', но пока я записываю команду в файл сценария с именем replace.sed, запустите ее следующим образом:

sed -f replace.sed filename

возникла ошибка, которая говорит, что

sed: file replace.sed line 1: unknwon option to 's'

ЧтоЯ хочу спросить, есть ли проблема с моим файлом сценария replace.sed, пока он работает в Windows?

1 Ответ

3 голосов
/ 01 ноября 2010

Неизвестная опция почти всегда является неконтролируемым символом после завершающего символа / (который, кстати, отсутствует в вашей версии командной строки, поэтому он должен жаловаться на неопределенную команду).

Посмотри на тебя replace.sed снова. В конце у вас может быть забавный персонаж, который может включать ', если вы забыли его удалить, или даже конец строки в стиле CTRL-M в DOS, хотя CygWin, кажется, справляется с этим - Вы не указали , который sed вы используете (это может помочь).


Хорошо, исходя из ваших правок, похоже, что одно из моих советов было правильным :-) У вас был CTRL-M в конце строки из-за концов строки CR / LF:

В конце каждой строки в файле *.sed была пара 'CR\LF', и это проблема, но вы не можете увидеть ее по умолчанию, я использую блокнот, чтобы удалить их вручную и устранить проблему. Но я не нашел способа удалить его автоматически или не содержать стиль 'new-line' при редактировании нового текстового файла в Windows.

Возможно, вы захотите приобрести более мощный редактор, такой как Notepad ++ или gVim (мой любимый), но на самом деле у вас do есть инструмент, который может избавиться от этих символов :-) Это называется sed.

sed 's/\015//g' replace.sed >replace2.sed

должен избавиться от всех символов CR из вашего файла и дать вам replace2.sed, который вы можете использовать для своей реальной работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...