2017-02-21 20 views
0

У меня есть массив bash с 3 элементами, и мне нужно удалить первые X-числовые символы из всех элементов и последнее Y количество символов из всех элементов. Как это можно достичь. Пример ниже:Удалить начало и конец каждого элемента в массиве в Bash

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

Я хотел бы этот массив, чтобы стать

echo ${array[@]} 
file1 file2 file3 

Как это может быть достигнуто?

+2

Возможный дубликат [Как изменить значения элементов массива bash без цикла] (http://stackoverflow.com/questions/12744031/how-to-change-values-of-bash-array-elements-without-loop) – Wrikken

ответ

1

Это будет идти с одним выстрелом:

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

Offcourse, может быть заключен в $() для того, чтобы быть присвоено переменной.

+0

Это делает именно то, что я хотел, чем вы! – mattman88

-1

Вы можете использовать основную строку манипуляции там:

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

Или, чтобы назначить его в массив:

array=(${array[@]##*/}) 
+0

Это только половина того, что задает вопрос. – chepner

+0

Ах, чек, ну, я добавил только как заполнитель, пока у нас не будет достаточно дублированных голосов;) – Wrikken

0

Там нет никакого способа сделать это всего за один шаг; вы можете, однако, сначала удалить префиксы, а затем суффиксы.

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