2013-09-09 5 views
1

Я здесь, чтобы узнать, как разбить имя файла, найденное командой ls: D. Позвольте мне объяснить лучше ...Разбить имя файла в оболочке

У меня есть переменная

images=$(ls | grep .img) 

И тогда я хочу, чтобы разделить результат поиска, потому что я просто хочу имя перед .img, поэтому хорошей идеей является используйте IFS.

IFS=. read -r disk <<< $image

Довольно хорошо, но когда делать эхо с переменным диска $, то, что я вижу, это «.img» только что, я хочу восстановить где до этого точки.

Спасибо всем, и приносим извинения за возможные ошибки :)

+0

Предложение: добавить тег, указывающий * * который оболочка. Из обсуждения, это в основном, вероятно, bash, но лучше быть явным. Даже если вы уже приняли ответ, это поможет будущим искателям с аналогичной проблемой найти ответ. – Edward

ответ

0

Используйте потоковый редактор SED! Пример:

echo "myImage.jpg" | sed 's/.jpg//' 

Это означает «˙s замену», и вы заменить часть между первыми двумя косыми чертами на части между второй и третьей косой черты, так и в примере, «.jpg» для пустой строки.

Вот и все!

+1

спасибо, я не могу голосовать за правильный ответ, но вы правы! –

+0

Без проблем, рад, что он работает для вас! ;) – weiglt

0

Поскольку вы уже используете <<<, я предполагаю, что вы используете оболочку, которая поддерживает массивы (в частности, bash Другие оболочки. - в частности zsh --may использовать другой синтаксис для того, что я собираюсь описать).

images=(*.img) # No need to parse ls, which is generally a bad idea 

Предполагая, что есть только один соответствующий файл, вы можете использовать

disk=${images%.img} 

раздеться .img от имени файла и сохранить оставшуюся часть в disk. Если может быть несколько совпадений, вы можете применить разделение расширения к каждому элементу массива и сохранить результат во втором массиве.

disks=("${images[@]%.img}") 
+0

ну, я купил не все, но это очень помогает, и моя цель - просто сплит имя файлов, потому что я использую его в резервной копии! Спасибо: D –

1

basename - это то, что вы хотите.
От человека странице:

basename - strip directory and suffix from filenames 

    EXAMPLES 
      basename /usr/bin/sort 
        Output "sort". 
      basename include/stdio.h .h 
        Output "stdio". 
+0

Я пробовал это раньше, но не на этом, так и спасибо. : D –

Смежные вопросы