2015-05-27 7 views
0

У меня есть два вопроса, с которыми я ищу помощь. Я использую Cygwin и новичок Unix.Использование SED в скрипте оболочки

1) У меня есть сценарий оболочки, который выполняет команду SED. В моем сценарии называется master.sh, у меня есть следующие

sed -nrf remove.sed <code.tp4> code.tp5 

remove.sed имеет одну строку

/INCLUDE /d 

Когда я выполнить сценарий с помощью следующей команды

bash master.sh 

я получаю следующая погрешность

master.sh: line 12: $'\r':command not found 

У меня нет ни малейшего представления о том, что бросает эту ошибку.

2) Моя вторая проблема заключается в том, что выходной файл «code.tp5» заканчивается «code.tp5?». Однако, используя проводник Windows, знак вопроса представляется непечатаемыми символами. Самая запутанная часть этого заключается в том, что я не получаю ошибок при выполнении этого с помощью командной строки. Любая помощь будет оценена.

+6

'master.sh' и' remove.sed' имеют окончания строк DOS. Используйте 'dos2unix', чтобы удалить их. – anubhava

ответ

0

Вы можете попробовать:

sed -nr s/\r//;/ INCLUDE /d' <code.tp4> code.tp5; sed 's/$/\r$/' code.tp5

Команда 's' для подстановки. Возврат каретки '\ r'. Таким образом, s/\r// заменит возврат каретки на ничего. После этого вы удалите строки, содержащие шаблон '/ INCLUDE/d'. И при этом: sed 's/$/\r$/' code.tp5, наконец, вы снова добавите возврат каретки, так что снова станет текстовым файлом DOS ($ означает конец строки на регулярном выражении). (Конечные линии Unix - это только новая строка, а возврат каретки DOS и новая линия).

Смежные вопросы