Fold преобразует все CR и CRLF в LF?

Потому что команда grep "confi [g]" ищет строку "config" , а во втором случае - grep "confi [g]" команда не содержит строки "config" . Он содержит строку "confi [g]" .

Это часто используемый прием grep, позволяющий избежать вывода команды grep при поиске в выводе ps .

3
26.06.2017, 15:23
3 ответа

У меня есть достойное решение в

cat example.txt | fold -s | awk 'sub("$", "\r")' | lpr -P PrintAdapter
1
27.01.2020, 21:21

fold в Mac OS X 10.11 не конвертирует CR в LF:

$ perl -E 'say(("aaaa "x17)."\r") for 1..2' | hexdump -C | grep 0d          
00000050  61 61 61 61 20 0d 0a 61  61 61 61 20 61 61 61 61  |aaaa ..aaaa aaaa|
000000a0  61 20 61 61 61 61 20 61  61 61 61 20 0d 0a        |a aaaa aaaa ..|
$ perl -E 'say(("aaaa "x17)."\r") for 1..2' | fold -s | hexdump -C | grep 0d
00000050  0a 61 61 61 61 20 0d 0a  61 61 61 61 20 61 61 61  |.aaaa ..aaaa aaa|
000000a0  61 61 20 61 61 61 61 20  0a 61 61 61 61 20 0d 0a  |aa aaaa .aaaa ..|
$ 

Поскольку даже после fold 0d (CR) все еще присутствуют в выводе ; fold просто вставил 0a (NL) там, где это необходимо.

Если ввод использует перевод строки в Интернете, а принтер требует перевода строки в Интернете, самый простой способ вызвать 0d агностический fold — преобразовать ввод в перевод строки Unix (удалить любой \r в предположении, что они находятся рядом с \n), передать этот вывод в fold, а затем преобразовать вывод fold вернуться к использованию перевода строки в Интернете:

tr -d '\r' < exampleCRLF.txt \
| fold -s \
| awk '{printf "%s\r\n", $0}' \
| lpr -P PrintAdapter

Возможно, более разумно установить dos2unix из системы пакетов (Fink, MacPorts, Homebrew) и использовать ее для преобразования перевода строки.

1
27.01.2020, 21:21

Ваша реализация fold, по-видимому, рассматривает CR как пробел.

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

… | sed 's/\r//g; s/$/\r/' | lpr

Эта команда sed удаляет все CR, а затем добавляет CR в конце каждой строки. Если ваша реализация sed не поддерживает \r, вместо этого вставьте буквальный символ возврата каретки (^M ).


trделает байт -для -переводов байтов, а не замены строки, поэтому tr "\n" "\n\r"не имеет смысла. (Ложный символ \rигнорируется. )Используйте такой инструмент, как sed, для замены строки.

1
27.01.2020, 21:21

Теги

Похожие вопросы