Как мне разобрать строку?

1596
Russ Bradberry

Я новичок в bash, и я создаю сценарий, который просматривает файлы в каталоге и на основе части имени файла, что-то делает с файлом, пока у меня есть это:

#!/bin/bash DIR="/Users/me/Documents/import/*" for f in "$DIR" do t=?????? echo "Loading $f into $t..." done 

поэтому $fбудет выводить что-то вроде этого: /Users/me/Documents/import/time_dim-1272037430173 из этого, я хочу tравняться time_dim, каталог может быть переменной длины и-1272037430173 фиксированную длину (это временная метка unix, кстати).

Каков наилучший способ сделать это?

1

3 ответа на вопрос

4
coneslayer

Непроверенные:

t=`basename $f | sed -e 's/-[0-9]\+$//'` 
он близок, он возвращает `time_dim-1272037429351` Russ Bradberry 14 лет назад 0
Попробуйте отредактированную версию выше (`+` изменено на `\ +` в соответствии с документацией по регулярным выражениям GNU sed) coneslayer 14 лет назад 0
все еще не работает, но я получил это: `t =` basename $ f | sed 's / - [^ -] * $ //' `` Russ Bradberry 14 лет назад 1
Единственная проблема, с которой я сталкиваюсь, заключается в том, что `t` объединяет все это перед выполнением эха, поэтому я получаю что-то вроде:` Загрузка / Users / me / Documents / import / * в date_dim demographic_dim event_log_facts ip_dim location_dim referal_dim time_dim` `Загрузка / Пользователи / меня / Документы / Импорт / time_dim-1272037430173 в time_dim ...` и т. Д. Russ Bradberry 14 лет назад 0
Oh, I don't think you're actually looping over the files. Try removing the quotes around $DIR: `for f in $DIR` .... Personally, I would say `DIR=/Users/me/Documents/import` (so that $DIR is just a directory, as its name suggests) and then `for f in $DIR/*` but that's a matter of taste. coneslayer 14 лет назад 1
0
jch

Вы также можете сделать:

$ t=`basename $f|tr -d '[0-9-]'`
или же

$ t=`basename $f|gawk -F- ''`

отредактировано: я неправильно понял вопрос

0
user31894
What is the best way to go about this? 

«лучший» способ, используя только внутреннюю часть bash, :)

$ s=/Users/me/Documents/import/time_dim-1272037430173 $ echo $ /Users/me/Documents/import/time_dim $ t=$ $ echo $ time_dim 

Похожие вопросы