LINUX.ORG.RU
ФорумAdmin

Solaris Shell Gjbcr подстроки в строке

 bash solaris


0

1

В Линуксе и Солярисе в частности новичек, поэтому заранее прошу прощения за «корявость» вопроса.

Ситуация следующая: на определенную директорию сервера складываются файлы определенного формата. Задача найти их, из их наименования вычленить дату (чаще всего произвольная с системной никак не связанная), создать каталог с названием года-месяца в другой директории(если еще не создан) и переместить туда необходимые файлы.

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

Пробовал:

#!/bin/bash

DIR='blablabla'
cd $DIR

TEMP=`ls abc123*.txt` 
#просто пример шаблона файла в данном случае возвращается один файл, обработку по строчкам потом добавлю(через тот же grep), пока это не важно. Например, TEMP=abc12320130613fjkh.txt


#----проблема------
#1 вариант
CATALOG=${TEMP:6:6}
echo $CATALOG #ну или echo ${TEMP:6:6}

#2 вариант
CATALOG=`expr substr "$TEMP" 6 6`
echo $CATALOG
#------------------

Пробовал смотреть в сторону grep, awk... да что-то ничего не выходит.Вроде банальная вещь, а застрял. Подскажите, что не так делаю.


Как-то у вас чересчур много строк для такого вопроса. Попробуйте выполнить такой скрипт:

#!/bin/bash
T=A1B2C3D4E5
echo ${T:3:3}
echo "===="
expr substr "$T" 3 3
И по результатам уже можно копать конкретнее, то-ли у вас в солярисе bash какой-то особенный, то-ли в вашем скрипте ошибка, может в TEMP неправильное значение.

mky ★★★★★
()
Ответ на: комментарий от mky

Прошу прощения первый раз создаю тему. немного перестарался.

Что касается ошибки, то понял в чем причина... это п..ц полный. Я файлик вызывал командой sh. а не bash %) Когда вы написали про особенный bash, тут то и осенило.

А вот expr substr все равно выдает: «expr: syntax error». Пробовал прям ваш пример брать, толку ноль. Ну хоть ${} заработало. Спасибо!

nkz
() автор топика
Ответ на: комментарий от nkz

Как вы уже поняли, в солярисе шелл по умолчанию не баш, и башизмов в нём нет. И ″expr″ там не такой, не всегда понимает ″substr″, вот подробнее про expr https://community.oracle.com/thread/1930190?start=0&tstart=0

Если expr не понимает substr, то можно использовать REGEXP-магию:

$ var=abcdefghijklm
$ expr "X$var" : '....\(.......\).*'
только точки умаетесь считать :-)

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.