Потому что команда grep "confi [g]"
ищет строку "config" , а во втором случае - grep "confi [g]"
команда не содержит строки "config" . Он содержит строку "confi [g]" .
Это часто используемый прием grep, позволяющий избежать вывода команды grep при поиске в выводе ps
.
У меня есть достойное решение в
cat example.txt | fold -s | awk 'sub("$", "\r")' | lpr -P PrintAdapter
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) и использовать ее для преобразования перевода строки.
Ваша реализация 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, для замены строки.