Я ответил на этот вопрос SO, но вот этот ответ, перепечатан.
Для 14.04-16.04 выполните следующие действия:
Загрузите драйверы из поддержки Canon. Извлеките файл в каталог. Из этого каталога:cd ~/Downloads
tar -xf Linux_UFRII_PrinterDriver_*.tar.*
sudo dpkg -i Linux_UFRII_PrinterDriver_*/*/Debian/*_$(dpkg --print-architecture).deb
sudo apt-get install -f
Не нужно перезагружаться, но если следующий шаг завершится неудачно, перезагрузитесь и повторите попытку. Запустите «Добавить принтер». Это должно просто отображаться автоматически, когда вы нажимаете кнопку «Добавить». Дайте ему несколько секунд, и принтер щебетает, а затем просто волшебным образом появляется. EDIT 2/27/16 (16.04beta) Обновлена ссылка на драйвер 3.10 (они обновили свой сайт). Все, что просто работало с использованием выше, не нужно перезагружать.
EDIT 9/8/16: Текущая версия драйвера теперь 3.20. Сделать команды установки агностическими как для версии драйвера, так и для системной архитектуры.
Вы можете удалить все вхождения символов из заданного набора с помощью tr -d. Чтобы удалить символ новой строки, используйте:
tr -d '\n'
Как всегда вы можете использовать перенаправление ввода и вывода и каналы для чтения или записи в файлы и другие процессы.
Если вы хотите сохраните последнюю новую строку, вы можете просто добавить ее обратно с помощью echo или printf '\n', e. g.:
cat file1 file2... | { tr -d '\n'; echo; } > output.txt
Вы можете транслировать свой многострочный выход через awk
awk '{printf "%s",$0} END {print ""}'
или использовать sed:
sed ':a;N;$!ba;s/\n//g'
$ echo -e "1\n2\n3\n4" | awk '{printf "%s",$0} END {print ""}'
1234
$ echo -e "1\n2\n3\n4" | sed ':a;N;$!ba;s/\n//g'
1234
Дальнейшее чтение: удалить разрыв строки с помощью AWK · serverfault.SE
Если вы хотите использовать Perl для этого, вы можете использовать его функцию chomp:
perl -pe chomp
Вы можете передать один или несколько имен файлов в качестве последующих аргументов.
perl -pe chomp file1 file2 file3
В некоторых случаях вы можете не захотеть этого делать, но вместо этого вы можете перенаправить или перенаправить на эту команду. (Эти возможности - и это оговорка - все применимы к любому другому решению perl -p или perl -n.)
Итак, если вы хотите обработать вывод из запуска some-command: [ ! d6] some-command | perl -pe chomp
Это потенциально быстрее, чем команда Perl в . В некоторых случаях вам может не понадобиться делать это . Символы новой строки (представленные \n) появляются только в конце строк в этой ситуации - потому что они используют Perl, чтобы решить, где заканчивается каждая строка. s/\n// выполняет поиск по всей строке для строк новой строки, а chomp просто удаляет одну из них в конце (если таковая имеется, так как последняя строка может иметь или не иметь ее).
Производительность может и не быть быть главной причиной, чтобы предпочесть chomp. Команда perl в ответе terdon будет только немного медленнее, если вы не обрабатываете огромный файл с очень длинными строками. И если вам нужна скорость, путь Дэвида Фёрстера по-прежнему, вероятно, быстрее. chomp, однако, является правильным инструментом для этого, если вы используете Perl, и я думаю, что цель chomp понятна, чем s/\n//.
Однако я рекомендую не использовать подстановку команд ($( )), просто для того, чтобы напечатать завершающую новую строку. Если текст, который вы обрабатываете, короток, это может быть довольно медленным - он должен сразу собрать весь текст, а затем распечатать его, и это затрудняет понимание вашей команды. Вместо этого вы можете выполнить ответ terdon и затем запустить echo или printf '\n'.
perl -pe chomp; echo
Если вы используете трубку some-command или (как показывает Дэвид Фостер), перенаправляя эту команду, вы можете заключить ее в { ;}, чтобы результат обеих команд был взят вместе. Если вы просто печатаете его на терминале, вы можете запустить его точно так, как показано выше. Это работает даже в том случае, если вы перенаправляете или перенаправляете команду, потому что echo / printf '\n' на самом деле не читает никаких ввода. То есть, это работает:
some-command | perl -pe chomp; echo
Хотя здесь вы не можете просто удалить { ;}:
{ perl -pe chomp; echo; } | some-other-command
Или, если хотите, вы можете сделать perl распечатать окончательную новую строку. Как и в случае perl и echo команд в { ;}, этот подход работает, даже если вы выполняете или перенаправляете из его (и, как и все подходы, это работает, когда вы 're pipeing в тоже):
perl -wpe 'chomp; END { print "\n" }'
Обратите внимание, что команда в ответе terdon отлично работает с этими методами печати окончательной новой строки. Например:
perl -pe 's/\n//'; echo
perl -pe 's/\n//; END { print "\n" }'
Также your_command | paste -sd '', который сохраняет конечную новую строку.
Много способов. Для иллюстрации я сохранил ваш пример в file:
$ cat file | tr -d '\n'
abcdefqwerty$
$ cat file | perl -pe 's/\n//'
abcdefqwerty$
Это удаляет все символы новой строки, включая последнюю. Вы можете вместо этого хотеть делать:
$ printf "%s\n" "$(cat file | perl -pe 's/\n//')"
abcdefqwerty
$ printf "%s\n" "$(cat file | tr -d '\n')"
abcdefqwerty
Если вы используете Bash, тогда вы можете сделать это без внешнего инструмента.
x=($(echo line1; echo line2))
echo "${x[@]}"
Результат:
line1 line2
Первая команда включает многострочный вывод в массив , вторая команда расширяет массив на несколько аргументов в одной строке.
Использование shell-only:
while IFS= read -r line || [ -n "$line" ]; do printf "%s" "$line"; done < inputfile.txt
Этот ответ имеет решение проблемы, которую вы пытаетесь создать: Почему bash удаляет \ n в $ (файл cat)?
Если вы наберете cat myfile.txt, вы увидите:
abc
def
ghi
Но если вы наберете echo $(cat myfile.txt), вы увидите:
abc def ghi
Обратите внимание, что этот метод вставляет пространство, где раньше были отдельные новые строки. Это облегчает чтение, но не строго придерживается вашего вопроса.
Вы можете удалить все вхождения символов из заданного набора с помощью tr -d. Чтобы удалить символ новой строки, используйте:
tr -d '\n'
Как всегда вы можете использовать перенаправление ввода и вывода и каналы для чтения или записи в файлы и другие процессы.
Если вы хотите сохраните последнюю новую строку, вы можете просто добавить ее обратно с помощью echo или printf '\n', e. g.:
cat file1 file2... | { tr -d '\n'; echo; } > output.txt
Вы можете транслировать свой многострочный выход через awk
awk '{printf "%s",$0} END {print ""}'
или использовать sed:
sed ':a;N;$!ba;s/\n//g'
$ echo -e "1\n2\n3\n4" | awk '{printf "%s",$0} END {print ""}'
1234
$ echo -e "1\n2\n3\n4" | sed ':a;N;$!ba;s/\n//g'
1234
Дальнейшее чтение: удалить разрыв строки с помощью AWK · serverfault.SE
Если вы хотите использовать Perl для этого, вы можете использовать его функцию chomp:
perl -pe chomp
Вы можете передать один или несколько имен файлов в качестве последующих аргументов.
perl -pe chomp file1 file2 file3
В некоторых случаях вы можете не захотеть этого делать, но вместо этого вы можете перенаправить или перенаправить на эту команду. (Эти возможности - и это оговорка - все применимы к любому другому решению perl -p или perl -n.)
Итак, если вы хотите обработать вывод из запуска some-command: [ ! d6] some-command | perl -pe chomp
Это потенциально быстрее, чем команда Perl в . В некоторых случаях вам может не понадобиться делать это . Символы новой строки (представленные \n) появляются только в конце строк в этой ситуации - потому что они используют Perl, чтобы решить, где заканчивается каждая строка. s/\n// выполняет поиск по всей строке для строк новой строки, а chomp просто удаляет одну из них в конце (если таковая имеется, так как последняя строка может иметь или не иметь ее).
Производительность может и не быть быть главной причиной, чтобы предпочесть chomp. Команда perl в ответе terdon будет только немного медленнее, если вы не обрабатываете огромный файл с очень длинными строками. И если вам нужна скорость, путь Дэвида Фёрстера по-прежнему, вероятно, быстрее. chomp, однако, является правильным инструментом для этого, если вы используете Perl, и я думаю, что цель chomp понятна, чем s/\n//.
Однако я рекомендую не использовать подстановку команд ($( )), просто для того, чтобы напечатать завершающую новую строку. Если текст, который вы обрабатываете, короток, это может быть довольно медленным - он должен сразу собрать весь текст, а затем распечатать его, и это затрудняет понимание вашей команды. Вместо этого вы можете выполнить ответ terdon и затем запустить echo или printf '\n'.
perl -pe chomp; echo
Если вы используете трубку some-command или (как показывает Дэвид Фостер), перенаправляя эту команду, вы можете заключить ее в { ;}, чтобы результат обеих команд был взят вместе. Если вы просто печатаете его на терминале, вы можете запустить его точно так, как показано выше. Это работает даже в том случае, если вы перенаправляете или перенаправляете команду, потому что echo / printf '\n' на самом деле не читает никаких данных. То есть, это работает:
some-command | perl -pe chomp; echo
Хотя здесь вы не можете просто удалить { ;}:
{ perl -pe chomp; echo; } | some-other-command
Или, если хотите, вы можете сделать perl распечатать окончательную новую строку. Как и в случае perl и echo команд в { ;}, этот подход работает, даже если вы выполняете или перенаправляете из его (и, как и все подходы, это работает, когда вы 're pipeing в тоже):
perl -wpe 'chomp; END { print "\n" }'
Обратите внимание, что команда в ответе terdon отлично работает с этими методами печати окончательной новой строки. Например:
perl -pe 's/\n//'; echo
perl -pe 's/\n//; END { print "\n" }'
Также your_command | paste -sd '', который сохраняет конечную новую строку.
Много способов. Для иллюстрации я сохранил ваш пример в file:
$ cat file | tr -d '\n'
abcdefqwerty$
$ cat file | perl -pe 's/\n//'
abcdefqwerty$
Это удаляет все символы новой строки, включая последнюю. Вы можете вместо этого хотеть делать:
$ printf "%s\n" "$(cat file | perl -pe 's/\n//')"
abcdefqwerty
$ printf "%s\n" "$(cat file | tr -d '\n')"
abcdefqwerty
Если вы используете Bash, тогда вы можете сделать это без внешнего инструмента.
x=($(echo line1; echo line2))
echo "${x[@]}"
Результат:
line1 line2
Первая команда включает многострочный вывод в массив , вторая команда расширяет массив на несколько аргументов в одной строке.
Использование shell-only:
while IFS= read -r line || [ -n "$line" ]; do printf "%s" "$line"; done < inputfile.txt
Этот ответ имеет решение проблемы, которую вы пытаетесь создать: Почему bash удаляет \ n в $ (файл cat)?
Если вы наберете cat myfile.txt, вы увидите:
abc
def
ghi
Но если вы наберете echo $(cat myfile.txt), вы увидите:
abc def ghi
Обратите внимание, что этот метод вставляет пространство, где раньше были отдельные новые строки. Это облегчает чтение, но не строго придерживается вашего вопроса.