Файл содержит как CRLF, так и LF. Я хочу удалить CRLF - PullRequest
0 голосов
/ 03 октября 2019

У меня есть файл, который содержит как CRLF, так и LF. Я пытаюсь удалить CRLF из моего файла. Другой ранее существовавший LF в моем файле, я хотел бы остаться позади. У меня проблемы, потому что либо кажется, что sed не может идентифицировать CRLF, либо потому, что tr удаляет и CRLF, и LF одновременно. У меня три,

tr -d '\r\n' <file.txt> file2.txt

также удаляет LF в моем файле. Я попытался удалить только \ r, но затем LF из CRLF остался позади. Я хочу, чтобы CRLF был удален или хотя бы превращен в пробел, но строка не заканчивается.

Любая помощь?

Я пробовал:

tr -d '\r\n' <file.txt> file2.txt

Я тоже пробовал sed, но не могу найти CRLF.

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Это преобразует файл формата dos в формат linux / unix.

dos2unix file
0 голосов
/ 04 октября 2019

Аргументом tr является список символов для работы, а не строка, поэтому \r\n означает \r или \n, а не \r, за которым следует \n,По умолчанию sed не может удалить \r\n, потому что sed читает по одной \n -конечной строке за раз, поэтому в буфере seds никогда не будет \r\n, только \r после того, как \n был удален при чтении строки sed.

Вы можете сделать это с помощью GNU awk для RS с несколькими символами:

awk -v RS='\r\n' -v ORS= '1' file

или с помощью GNU sed для -z (но при этом весь файл будет сразу считан в память):

sed -z 's/\r\n//g' file
...