Ну, это все зависит от вашего определения текстового файла.В Perl 5 есть оператор -T
filetest , который сообщит вам, является ли имя файла или дескриптор файла текстовым файлом (используя определение Perl 5):
perl -i -pne 'BEGIN{@ARGV=grep-T,@ARGV}s#regex#replacement#' *
Блок BEGIN
будетотфильтруйте все файлы, которые не прошли тест -T
, чтобы они даже не читались (за исключением их первого блока, потому что именно это -T
использует, чтобы определить, являются ли они текстом).
Из perldoc -f -X
Переключатели -T и -B работают следующим образом.Первый блок файла или около того проверяется на наличие нечетных символов, таких как странные управляющие коды или символы с установленным старшим битом.Если найдено слишком много странных символов (> 30%), это файл -B;в противном случае это файл -T.Кроме того, любой файл, содержащий нулевой байт в первом блоке, считается двоичным файлом.Если в файловом дескрипторе используется -T или -B, то проверяется текущий буфер ввода-вывода, а не первый блок.И -T, и -B возвращают true для пустого файла или файла в EOF при тестировании файлового дескриптора.Поскольку для выполнения теста -T вы должны прочитать файл, в большинстве случаев вы хотите сначала использовать -f для файла, как в следующем, если только не -f $ file && -T $ file.