Обратите внимание, что если вы удаляете каждый символ новой строки из файла, даже последний,тогда это уже не текстовый файл (, если только файл не окажется пустым ), поскольку текстовый файл содержит последовательность текстовых строк, причем текстовые строки разделяются символами новой строки.
Теперь, чтобы удалить все символы, кроме алфавитных (любого алфавита ), как сказал @Kusalanada, POSIXly, вы должны использовать tr -cd '[:alpha:]'
.
К сожалению, в некоторых tr
реализациях, включая GNU tr
, это не работает для многобайтовых -символов. В локалях UTF -8 это означает все символы, кроме ASCII.
В системах GNU вы можете использовать GNU awk
или GNU sed
, которые поддерживают многобайтовые символы:
Этот синтаксис не является специфичным для GNU -, но вы найдете некоторые реализации, не относящиеся к -GNU sed
/ awk
, которые не поддерживают многобайтовые символы. Помните, что GNU sed
/ awk
по крайней мере не удалит последовательности байтов, которые не образуют допустимых символов (, как вывод printf 'à b \200\n'
в локали UTF -8 ).
С помощью uconv
из проекта ICU вы можете сделать:
;'
Где -i
указывает uconv
пропустить ввод, который не может быть декодирован.
Но это работает только для данных UTF -8. Обратите внимание, что он использует свойства символов Unicode (некоторую версию Unicode ), в отличие от того, что ваш язык определяет, что в алфавитном порядке, а что нет.
С GNU grep
вы можете использовать:
Или при сборке с поддержкой PCRE (с использованием свойств Unicode):
В GNU awk
другим способом пропустить неверный ввод является использованиеRS
:
Чтобы изменить файлы в месте -, вы можете использовать gawk
модуль inplace
:
gawk -i inplace gawk -v RS='[[:alpha:]]' -v ORS= '{print RT}' file
Вы можете выполнить nvidia-smi | grep -i driver
и найти «Версия драйвера».
Или просто nvidia-smi
должен предоставить вам эту информацию внутри коробки.