Perl в помощь:
perl -ne '($t, $r) = /([0-9]+\s+)(.*)/;
print "$pt$p\n$_" if $r ne $p;
$p = $r;
$pt = $t;
}{
print $t, $r' input-file \
| sort -nu | tail -n+2
-n
читает ввод построчно. $t
- метка времени плюс пробелы, $r
- "остаток". $p
- предыдущий остаток, $pt
- предыдущая временная метка. Perl печатает некоторые строки дважды, sort -nu
должен удалить дубликаты. tail
удаляет первую пустую строку.
Вместо
if [ -d abc ] ; then
echo 'Directory exists'
использовать
if /bin/ls -d [aA][bB][cC]/ &> /dev/null ; then
echo 'Directory exists'
Вbash
:
shopt -s nullglob nocaseglob
set -- [a]bc/
if [ "$#" -gt 0 ]; then
echo 'There is at least one directory called "abc" (case ignored):'
printf '\t%s\n' "$@"
fi
Два bash
параметра оболочки nullglob
и nocaseglob
используются здесь, чтобы проверить, существует ли какой-либо каталог, соответствующий шаблону [a]bc/
, независимо от случая -. Параметр nullglob
обеспечивает удаление шаблона при отсутствии совпадений (, в противном случае он остается нераскрытым ), а параметр nocaseglob
делает совпадения шаблонов нечувствительными к регистру.
Мы используем [a]bc/
вместо простого abc
, чтобы вызвать сопоставление имен файлов только с каталогами. С помощью [a]
мы заставляем оболочку выполнять подстановку и, таким образом, подбираем все совпадающие имена, а с завершающим /
мы ограничиваем сопоставление только каталогами. Выполнение этого в качестве аргумента для set
устанавливает позиционные параметры в соответствующие имена каталогов. Затем они доступны в $@
, а количество совпадений находится в $#
.
Тестирование:
$ mkdir abc aBc ABc # create three directories with only case diffs in their names
$ touch abC #... and also a file
$ bash./script.sh
There is at least one directory called "abc" (case ignored):
ABc/
aBc/
abc/