команда sed не изменяет текст - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь найти способ автоматически изменить номер версии, и для этого у меня есть скрипт, который пытается прочитать файл, а затем изменить его.

\\ students.txt
this is a text, text is not so bad, and more text

У меня есть файлы student.txt и changetext.sh в одном каталоге.

\\ changetext.sh
sed -i='' "s/, /- /g" students.txt

Когда я запускаю эту команду на Cygwin в битовой системе Windows64 с Windows 10, она хорошо работает на консоли. Но когда я пытаюсь запустить эту команду из сценария оболочки, как показано выше, она выдает следующую ошибку.

$ ./changetext.sh
: No such file or directoryt

Я не уверен, в чем проблема? Может кто-нибудь, пожалуйста, подскажите мне об этом?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Хорошо, я нашел ответ. Я думаю, что это проблема Cygwin, потому что я попробовал тот же сценарий на ОС Ubuntu, и он прекрасно работает.

Я не уверен в этом вопросе, но кто-то может исправить меня, если я ошибаюсь. Я попробовал Ubuntu 16.04, и он работал, но он не работал на Windows 10 с Cygwin.

0 голосов
/ 26 апреля 2018

Я получаю другое поведение на своей копии Cygwin (около 6 месяцев под Win10), но вы используете -i неправильно.
Вы хотите "-i [ПРОБЕЛ]" Это не [SPACE], а буквальное пространство, конечно. Он пытается создать суффикс = с вашим использованием. Вероятно, это интерпретирует '' в вашей системе иначе, чем моя.

Ааа .... и если я в каталоге Windows, я получаю ошибки. Я считаю, что любое имя файла, которое он пытается сгенерировать, поскольку ваш файл резервной копии является законным для Cygwin, но не для Windows.

Если вы хотите создать резервную копию файла, используйте -i~ или -i.bak или что-то в этом духе.

Еще одна потенциальная проблема в вашем скрипте - отсутствие шебанга для указания, какая оболочка должна использоваться для его интерпретации. Странность -i='' очень вероятно будет по-разному интерпретироваться различными оболочками. Баш Шебанг типичен:

Какой предпочтительный Баш Шебанг?

...