Остановите sed на окнах от изменения \ r на \ r \ n - PullRequest
5 голосов
/ 08 августа 2011

Я использую sed на окнах, чтобы удалить некоторые лишние строки в формате Unix (\ n окончания концов).К сожалению, sed заменяет эти окончания строк даже в строках, которые не меняются на \ r \ n.Как я могу остановить sed от этого?

Мой sed - это простой sed-for-windows-standalone-exe:

C:\dev>sed --version
super-sed version 3.59
based on GNU sed version 3.02.80

Ответы [ 4 ]

7 голосов
/ 19 ноября 2011

GNU sed (http://gnuwin32.sourceforge.net/packages/sed.htm) имеет параметр -b для «двоичного режима», т.е. е. не заменять \ n на \ r \ n.

Если вы используете sed, поставляемый с cygwin, то он обычно использует двоичный режим, даже без опции -b. А именно, команды cygwin используют путь к входному файлу, чтобы решить, следует ли им работать в текстовом или двоичном режиме, т.е. е. вывод \ r \ n или \ n: http://www.cygwin.com/cygwin-ug-net/using-textbinary.html. Как сказано в документе, двоичный режим используется по умолчанию для имен путей MS-DOS, и, по моему опыту, файловые системы, смонтированные по умолчанию, также монтируются в двоичном режиме.

3 голосов
/ 08 августа 2011

Я не знаю, как вы можете сделать это с помощью sed в Windows, но вы пробовали:

unix2dos you_file
sed ...
dos2unix you_file
2 голосов
/ 17 августа 2016

Если вы добавите параметр -b, вы будете обрабатывать файл как двоичный файл, и он не изменит окончания строки.В руководстве говорится:

 -b, --binary

          open files in binary mode (CR+LFs are not processed specially)
2 голосов
/ 08 августа 2011

Извините, но sed, кажется, не работает так, как вам хотелось бы, то есть sed! = Awk (который настраивается).

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

Вы можете попробовать изменить исходный код или связаться с авторами.

Чтениечерез файл NEWS в исходном коде я нашел

* The s/// command now understands the following escape (in both halves):
\a  an "alert" (BEL)
\f  a form-feed
\n  a newline
\r  a carriage-return
\t  a horizontal tab
\v  a vertical tab
\oNNN   a character with the octal value NNN
\dNNN   a character with the decimal value NNN
\xNN    a character with the hexadecimal value NN

Вы пробовали `s / \ r // 'как последнюю команду в вашем скрипте?

Я сделал быстрое сканированиев большинстве текстовых файлов, но не нашел ничего, что заставило бы меня поверить, что есть опция cmd-line, которая даст то, что вам нужно.

Поскольку вы не хотите использовать unix2dos, в качестве действияЯ очень оптимистичен и предлагаю использовать tr для очистки этих надоедливых '1018 *

 sed -i -f yourSedScript yourFile
 mv yourFile yourFile.wrk
 tr -d '\015' yourFile.wrk > yourFile

Наконец, так как кажется, что если вы редактируете файлы Unix в окне Windows, вы должны передавать файлы через'ftp' или аналогичный, чтобы получить Unix для Windows, почему бы не использовать опции ftp для преобразования строки enДингс?

Надеюсь, это поможет.

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