echo "foo" > test.txt

od -c test.txt показывает мне f o o \n как и ожидалось.

Теперь я пытаюсь преобразовать LF в CRLF и проверить результат после конвейера:

tr '\n' '\r\n' < test.txt | od -c

Но вывод f o o \r

Как это случилось? Почему программа игнорирует мой \n и вместо этого переводит просто \r ?

1 ответ1

2

tr заменяет отдельные символы одиночными.

tr [-c|-C] [-s] string1 string2

[...]

Если присутствует string2 , каждый входной символ, найденный в массиве, указанном в string1 должен быть заменен символом в той же относительной позиции в массиве, который указан в string2 .

(источник)

В вашем случае первый символ из первой строки (\n) преобразуется в первый символ из второй строки (\r).

Вам нужен другой инструмент, чтобы вставить более одного символа вместо одного. Пример с sed:

sed 's/$/\r/' < test.txt | od -c

Или специализированный инструмент для обработки концов строк, в частности:

unix2dos < test.txt | od -c

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .