POSIXly, Вы могли сделать:
find . -name '*.[jJ][pP][gG]' -exec sh -c '
for i do
[ -e "${i%.*}.pdf" ] || printf "%s\n" "$i"
done' sh {} +
Если бы Вы хотите искать файлы PDF нечувствительно к регистру, Вы сделали бы:
find . -name '*.[jJ][pP][gG]' -exec sh -c '
for i do
set -- "${i%.*}".[pP][dD][fF]
case $1 in
(*"]") printf "%s\n" "$i"
esac
done' sh {} +
Ваша система должна иметь GNU grep, который имеет опцию -P
для использования выражений Perl и можно использовать это, объединенное с -c
(так никакая потребность в wc -l
):
grep -Pvc '\S' somefile
'\S'
вручает шаблон \S
к grep и соответствиям вся строка, содержащая что-либо, что не является пространством, -v
выбирает все другие строки (те, которые только имеют пространство), и -c
считает их.
Из страницы справочника для grep:
-P, --perl-regexp
Interpret PATTERN as a Perl regular expression (PCRE, see
below). This is highly experimental and grep -P may warn of
unimplemented features.
-v, --invert-match
Invert the sense of matching, to select non-matching lines. (-v
is specified by POSIX.)
-c, --count
Suppress normal output; instead print a count of matching lines
for each input file. With the -v, --invert-match option (see
below), count non-matching lines. (-c is specified by POSIX.)
Можно использовать grep
для него:
$ grep -c '^[ ]*$' somefile
где ^
/$
соответствуйте запущению/заканчиванию строки и [ ]
указывает класс символов, который включает пробелы и символы табуляции. *
обозначьте 0 к неограниченным повторениям левой стороны.
-c
опция говорит grep считать строки, соответствующие шаблону - вместо того, чтобы печатать их к терминалу.
Отметьте это на zsh
Я должен поразить Ctrl+VTab для ввода литерального символа табуляции.
(a [ \t]
не распознан grep
)
-P
поддерживайте...)
– maxschlepzig
09.02.2014, 18:48
-P
или не имейте гнуgrep
, затемgrep -Ec '^[[:space:]]*$' somefile
должен работать (работы тот же путь). Я имею+1
'd так или иначе как, у кого нет гнуgrep
в эти дни... спасибо – abligh 09.02.2014, 14:46grep
действительно имеет-P
и сделал начиная с (по крайней мере) 10,6. – abligh 09.02.2014, 18:19