2010-01-04 5 views
0

Мой скрипт принимает имя файла в форме R # TYPE.TXT (# - номер, а TYPE - два или три символа). Я хочу, чтобы мой сценарий дал мне ТИП. Что мне делать, чтобы получить его? Думаю, мне нужно использовать awk и sed.Извлечение строки из имени файла

Я использую/бен/ш (которое является обязательным условием)

ответ

1

вы можете использовать AWK

$ echo R1CcC.TXT | awk '{sub(/.*[0-9]/,"");sub(".TXT","")}{print}' 
CcC 

или

$ echo R1CcC.TXT | awk '{gsub(/.*[0-9]|\.TXT$/,"");print}' 
CcC 

и если СЭД действительно то, что вы хотите

$ echo R9XXX.TXT | sed 's/R[0-9]\(.*\)\.TXT/\1/' 
XXX 
1

Я думаю, что это то, что вы ищете.

$ echo R3cf.txt | sed "s/.[0-9]\(.*\)\..*/\1/" 

cf 

Если txt всегда имеет верхний регистр и имя файла всегда начинается с R, вы можете сделать что-то вроде.

$ echo R3cf.txt | sed "s/R[0-9]\(.*\)\.TXT/\1/" 
+0

Если я использую вам пример, я получаю СЕПГ: -e выражение # 1, символ 20: неверная ссылка \ 1 на RHS команда 'S'в я переписать его: SED«с/R1 \ (. * \) \. TXT/\ 1/" – magol

+0

Я считаю, что если вы напишете RegEx так, ваше имя файла должно начинаться с« R1 ». Что ваше «uname -a»? –

+0

upps, взял неверный код. Должно быть sed "s/R [0-9] \ (. * \) \. TXT/\ 1 /" – magol

0

Вы можете использовать только оболочку (в зависимости от того, что shell bin/sh есть:

f=R9ABC.TXT 
f="${f%.TXT}"  # remove the extension 
type="${f#R[0-9]}" # remove the first bit 
echo "$type"  # ==> ABC 
+0

его раковина bourne .. – ghostdog74

+0

не на всех ОС –

+0

В старой системе unix я код для получения «плохой подстановки» при вводе f = «$ {f% .TXT}» – magol