Я обновил то, что вы пытались сделать, с помощью некоторой базовой отладки, при этом достигнув того, что, как я полагаю, вы хотите:
read -p "Please specify a location/file to be searched...Example=/var/tmp/test.txt : " location
while [[ ! -f ${location} ]] ; do
read -p "Unable to located file specified, please try again" location
done
read -p "Please specify a search term :" search
result=$(grep -w ${search} ${location} | wc -w)
echo "The search term ${search}, appears ${result} times inside of ${location}"
ls
по умолчанию уже будет сортировать лексически. Вы просто читаете их в неправильном порядке, когда они изложены в такой краткой форме. Прочитайте каждую колонку, а затем перейдите к следующей. Чтобы увидеть фактический лексический порядок ls
, выведите по одному объекту в строке:
$ ls -1
0
1
2
3
4
catalog.svg
config.yml
sort -n
сортирует "по числовому значению строки"; в этой ситуации, когда sort
пытается численно сравнить число с буквой, он возвращается к memcmp
соответствующих байтов, помещаяc
(ASCII 99 )после0
(ASCII 48 ). С опцией --debug
сортировки GNU вы можете увидеть, как происходит сбой :
$ ls |sort -n --debug
sort: using ‘en_US.UTF-8’ sorting rules
0
_
_
catalogIcon-gitlab.svg
^ no match for key
______________________
zoo
^ no match for key
___
1
#... continues...
Для решения только для bash -я бы использовал цикл (, предполагая, как вы указываете, что каталоги начинаются с0
):
highest=-1
for d in *; do [[ -d "$d" ]] || continue; [[ "$d" -gt "$highest" ]] && highest=$d; done
printf '%s\n' "$highest"
Попробуйте это, чтобы получить каталог с максимальным номером:
max=$(printf "%s\n" */ | sort -n | tail -1)
echo "${max%/}"
Как насчет?:
ls -1v
0
1
2
3
4
12
23
catalog.svg
config.yml
v означает version
порядок сортировки.
Чтобы получить последнее (наибольшее )число, выберите только числа:
$ ls -1v | grep -x '[0-9]*'
0
1
2
3
4
12
23
И в хвост:
$ ls -1v | grep -x '[0-9]*' | tail -n 1
23
Единственное решение для bash:
$ max=0; for d in */; do d=${d%/}; [[ d -gt max ]] && max=$d; done; printf '%d\n' "$max"
23