Файловая система FAT32 имеет минимальный размер :, она должна содержать не менее 65525 кластеров. Размер кластера кратен размеру сектора.В вашем случае размер сектора равен 4096, а mkfs.vfat
использовал значение по умолчанию, кратное 8, для количества секторов в кластере. Используйте -s 1
, чтобы указать один сектор на кластер :
mkfs.fat -v -F 32 -S 4096 -s 1 /dev/sde1
Это приводит к размеру кластера 4096, который должен быть достаточно мал, чтобы вместить больше, чем минимум 65525 кластеров в вашем разделе размером 264 МБ.
Предположим, вы хотите удалить строки, которые содержат менее n
графических символов:
awk -v n=5 '{ line = $0; gsub("[^[:graph:]]", "") } length >= n { print line }'
При этом удаляются все символы, не соответствующие [[:graph:]]
. Если длина оставшейся строки больше или равна n
, печатается немодифицированная строка ().
Значение n
задается в командной строке.
[[:graph:]]
эквивалентно [[:alnum:][:punct:]]
, что, в свою очередь, совпадает с [[:alpha:][:digit:][:punct:]]
. Это примерно то же самое, что и [[:print:]]
, но не соответствует пробелам.
Вместо [^[:graph:]]
вы можете использовать [[:blank:]]
для удаления всех вкладок или пробелов.
С sed
, следуя приведенному выше коду awk
почти буквально,
sed -e 'h; s/[^[:graph:]]//g' \
-e '/.\{5\}/!d; g'
или упрощенно (, считая только не -пустые символы ),
sed -e 'h; s/[[:blank:]]//g' \
-e '/...../!d; g'
Это сначала сохраняет текущую строку в ячейке хранения с помощью h
. Затем он удаляет все не -графические символы (или пустые символы во второй вариации )в строке с s///g
. Если строка содержит менее 5 символов (, измените это число на любое желаемое или измените количество точек во втором варианте ), строка будет удалена. В противном случае сохраненная строка извлекается из области хранения с неявным выводом g
и ().
Это удалит строки, содержащие 10 и менее 10 символов:
sed -E '/^.{1,11}$/d' filename
ИЛИ
sed -r '/^.{1,11}$/d' filename
Если вы хотите обрезать пробелы, вы можете использовать:
sed -E 's/^[[:space:]]*//g;s/[[:space:]]*$//g;/^.{1,11}$/d' filename
Если вы хотите сделать в -место (непосредственно внутри файла )удалить, используйте опцию-i с ним.
sed -e 's/[^[:space:][:cntrl:]]/&/20' -e t -e d < file
напечатает строки file
, которые содержат не менее 20 не -пробелов, не -управляющих символов (см. также [[:graph:]]
или [[:alnum:][:punct:]]
, неясно, какие символы вы хотите включить/ исключить из вашего описания; имейте в виду, что в некоторых системах неразрывный -символ пробела -включается в graph
, а не вspace
).
Идея состоит в том, что он пытается заменить 20-е вхождение не -пробельного/управляющего символа самим собой (&
), и мы ответвляемся, если эта замена выполняется успешно (t
), таким образом пропуская d
действие (, чтобы удалить ).
С помощью awk
можно сделать:
awk 'gsub(/[^[:space:][:cntrl:]]/, "&") >= 20' < file
Основываясь на том факте, что gsub()
возвращает количество сделанных замен.
Сgrep
:
grep -E '^([[:space:][:cntrl:]]*[^[:space:][:cntrl:]]){20}' < file
((.*[^[:space:][:cntrl:]]){20}
тоже подойдет, но будет дороже ).
perl -pi.bak -e '$_ = "" unless length > 20' file1 file2
Это позволяет использовать строки (, включающие "\n" ), содержащие x+1 или более символов.
perl -n -e 'print if tr/!-\176// > 38'
, где 38 — это количество символов, отличных от -.
Если вы ищете конкретный список не -пробельных символов , не стесняйтесь вставлять их между первыми двумя / в tar, либо по отдельности, либо с помощью " -" указание диапазона :например
tr/A-Za-z0-9//
Если вам нужно -, чтобы быть одним из них, поставьте -первым.
Если вам нужно/быть одним из них, закодируйте его как \057
.
tr/A-Za-z0-9\057+// # match characters in Base64
perl -e
означает, что программа Perl находится в командной строке. perl -n -e
означает повторение этой программы в каждой строке ввода, т. е. обертывание ее внутри perlwhile (<>) { your code here }
Во время итерации perl всасывает входные данные в метапеременную с именем $ _.
Это также цель по умолчанию для большинства команд (, включая print и tr ).
command if condition
- это идиома perl для "если (условие ){команда}"
tr///
— оператор транслитерации , например. tr/ABC/abc/
означает замену каждого A на a, B на b и C на c. Оператор -
означает диапазон,поэтому tr/A-Z/a-z/
означает весь алфавит. Null во втором поле означает, что строку не менять. Возвращаемое значение оператора tr/// — это количество совпадающих символов.
Раздутый в толстый код, этот код выглядит как
$textstart = "!"; # first character after space
$textend = "\176"; # last printable character in octal; dec 126 or 0x7E
$textrange = $textstart. "-". $textend;
while (defined ($_ = <STDIN>) ) { # while able to suck a line from STDIN into $_
if ( {$_ =~ tr/$textrange//} # count desired characters within textrange
> 38 ) # compare to 38
{ # start if block
print $_; # If valid, print raw input
} # end if block
} # end while
Использование Раку (урожденная Perl6)
raku -ne '.put if chars( S:g/\s// ) >= 10;' filename
или
raku -ne '.put unless chars( S:g/\s// ) < 10;' filename
или
raku -ne '.put unless chars( S:g/\W// ) < 10;' filename
или
raku -ne '.put unless chars( S:g/<ws>// ) < 10;' filename
Вкратце, в Raku/Perl6 оператор «заглавная -S» S///
используется для создания результирующей строки, лишенной нежелательных символов (, например. пробелы ), символы результирующей строки подсчитываются с помощью функции chars
, сравниваются с «n» (, используя 10 в качестве примера ), и, наконец, --, если логическое значение удовлетворяется--.put
вернет исходную строку без изменений.
Примечание 1:«S/// использует ту же семантику, что и оператор s///, за исключением того, что он оставляет исходную строку нетронутой и возвращает результирующую строку вместо $/ ($/ все еще установлено в значение те же значения, что и с s/// )».
https://docs.raku.org/language/regexes#S///_non-destructive_substitution
Примечание 2 :В Raku/Perl6 модификаторы регулярных выражений, такие как:g
(для «глобального» ), известны как наречия и (обычно )помещаются в начало S///
или s///
. ] сразу после S
или s
.
Примечание 3 :Точка .
в Raku/Perl6 используется для вызова метода для переменной темы $_
, поэтому первое «слово» кода .put
по сути является сокращением для $_.put
.
https://docs.raku.org/language/5to6-nutshell#-%3E_Method_calls
Примечание 4 :Raku/Perl6 имеет гораздо более ограниченный набор флагов командной строки. Флаг -e
(«выполнить» )запускает код Raku/Perl6 в командной строке. Флаг -n
запускает код Raku/Perl6 построчно, т. е. для каждой строки входного файла по одной строке за раз, возвращая результат.Два флага могут быть объединены в флаг -ne
, но в любом случае флаг -e
должен быть последним.
Perl _6 ссылок:
https://docs.raku.org/language/5to6-nutshell#Command-line_flags
https://github.com/rakudo/rakudo/wiki/Running-rakudo-from-the-command-line