Bashda boshlang'ich va oxirgi qismlarni olib tashlash

3 elementli bir bash qatorim bor va men barcha elementlardan birinchi X raqamli belgilarni va barcha elementlardan keyingi so'nggi Y sonini olib tashlash kerak. Bunga qanday erishish mumkin? Quyidagi misol:

echo ${array[@]}
random/path/file1.txt random/path/file2.txt random/path/file3.txt

Ushbu qatorni bo'lishini xohlayman

echo ${array[@]}
file1 file2 file3

Bunga qanday erishish mumkin?

0

6 javoblar

Bu bir marta o'qiladi:

$ a=( "/path/to/file1.txt" "path/to/file2.txt" )
$ basename -a "${a[@]%.*}"
file1
file2

Offcourse, o'zgaruvchiga tayinlanishi uchun $() da berilishi mumkin.

1
qo'shib qo'ydi
Bu men istagan narsamni aniqlaydi!
qo'shib qo'ydi muallif mattman88, manba

Bu bir marta o'qiladi:

$ a=( "/path/to/file1.txt" "path/to/file2.txt" )
$ basename -a "${a[@]%.*}"
file1
file2

Offcourse, o'zgaruvchiga tayinlanishi uchun $() da berilishi mumkin.

1
qo'shib qo'ydi
Bu men istagan narsamni aniqlaydi!
qo'shib qo'ydi muallif mattman88, manba

Hali ham asosiy mag'lubiyatga qo'llashni qo'llashingiz mumkin:

echo ${array[@]##*/}

Yoki, qatorga tayinlash uchun:

array=(${array[@]##*/})
1
qo'shib qo'ydi
Bu faqat savolning yarmini talab qiladi.
qo'shib qo'ydi muallif chepner, manba
Qani, tekshirib ko'rsangiz, men faqat qo'shilaman, shuning uchun bizda etarli miqdorda ovozlar bor ekan.
qo'shib qo'ydi muallif Wrikken, manba

Hali ham asosiy mag'lubiyatga qo'llashni qo'llashingiz mumkin:

echo ${array[@]##*/}

Yoki, qatorga tayinlash uchun:

array=(${array[@]##*/})
1
qo'shib qo'ydi
Bu faqat savolning yarmini talab qiladi.
qo'shib qo'ydi muallif chepner, manba
Qani, tekshirib ko'rsangiz, men faqat qo'shilaman, shuning uchun bizda etarli miqdorda ovozlar bor ekan.
qo'shib qo'ydi muallif Wrikken, manba

Buni faqat bitta qadamda qilish mumkin emas; Biroq, oldin old qo'shimchalarni, keyinchalik qo'shimchalarni olib tashlashingiz mumkin.

array=( "${array[@]##*/" )  # Remove the longest prefix matching */ from each element
array=( "${array[@]%.*}" )  # Remove the shortest suffix match .* from each element
0
qo'shib qo'ydi

Buni faqat bitta qadamda qilish mumkin emas; Biroq, oldin old qo'shimchalarni, keyinchalik qo'shimchalarni olib tashlashingiz mumkin.

array=( "${array[@]##*/" )  # Remove the longest prefix matching */ from each element
array=( "${array[@]%.*}" )  # Remove the shortest suffix match .* from each element
0
qo'shib qo'ydi