Это ищет строки, начинающиеся с int
или unsigned int
, для которых оператор заканчивается на ;
и не содержит =
:
$ egrep '^(unsigned )?int [^=]*;' myfile.txt
int x;
int dftr2;
unsigned int dftrxe2;
Обратите внимание, что это также работает с комментариями и правильно игнорирует любые =
в комментарии. Рассмотрим этот тестовый файл:
$ cat myfile2.txt
int y; // y=height
int z=1; // z is depth
Это результат:
$ egrep '^(unsigned )?int [^=]*;' myfile2.txt
int y; // y=height
Наконец, обратите внимание, что egrep
устарел. grep -E
предпочтительнее:
grep -E '^(unsigned )?int [^=]*;' myfile.txt
Если числа имеют одинаковое количество цифр , должен подойти обычный порядок сортировки, поэтому мы могли бы просто заполнить массив именами и взять последний элемент
$ mkdir -p parentdir/{1,2,6,3}
$ A=(parentdir/*) # fill an array with the names
$ echo "${A[-1]}" # print the last member of the array
parentdir/6
$ echo "${A[-1]##*/}" # remove everything up to last /
6
. Но если они имеют разное количество цифр, это не сработает (порядок будет 1
, 13
, 2
, ...). Итак, давайте найдем максимум вручную:
$ mkdir -p parentdir/{1,2,6,3,13}
$ max=0; # assuming they're non-negative integers!
$ for x in parentdir/* ; do
n=${x##*/}; # take just the number so that comparisons work
[ "$n" -gt "$max" ] && max=$n
done
$ echo "$max"
13
Предыдущее настолько проще, что стоит рассмотреть возможность создания имен, дополненных до фиксированной длины начальными нулями, если это возможно.
Вам нужен самый новый каталог, верно? Так что прекратите играть с числами и позвольте zsh
сделать всю работу:
NEWEST=(/user/mosawi/parentdir/*(/om[1]))
NEWESR=${NEWEST}/payload.gzip
Фокус в том, чтобы использовать квалификаторы glob для сортировки (o) каталогов (/) при изменении time (m) и получить только первый ([1]).
Предполагая, что имена каталогов отсортированы правильно (т. е. они содержат одинаковое количество цифр и в каталоге нет нечисловых имен):
newest="$(printf '%s\n' /user/mosawi/parentdir/* | tail -n 1)"
Файл будет " $newest/payload.gzip"
.
Еще один трюк заключается в создании символической ссылки на последний каталог всякий раз, когда создается новый каталог:
mkdir "parentdir/$i" && ln -sf "parentdir/$i" parentdir/latest
Тогда легко получить доступ к parentdir/latest/payload.gzip
.
mkdir -p parentdir/{1,2,6,3,13}
просто ls
, без сортировки:
ls parentdir/
1 13 2 3 6
теперь сортируем:
ls parentdir/ -v
1 2 3 6 13
Теперь сортируем и берем последнее:
ls parentdir/ -v | tail -n1
13
Плюсы: нет циклов, однострочник
Минусы: вызов внешней команды