2015-01-30 3 views
0

я следующие хранится в файле с именем tmp.txtКак извлечь слова между двумя символами в linux?

user/config/jars/content-config-factory-3.2.0.0.jar 

Мне нужно хранить это слово в переменную -

$variable=content-config-factory 

я написал следующее

while read line 
    do 
    var=$(echo $line | awk 'BEGIN{FS="\/"; OFS=" "} {print $NF}') 
    var=$(echo $var | awk 'BEGIN{FS="-"; OFS=" "} {print $(1)}') 
    echo $var 
    done < tmp.txt 

Это возвращает результат «content» вместо «content-config-factory».

Может кто-нибудь скажет мне, как извлечь слово между двумя символами из строки эффективно.

+0

что может быть другой вид контента (всегда путь/какое-то слово отдельно от '-', чем серии числа, разделенного точкой и конечным словом? потому что для вашего вопроса проще написать 'variable = content-config-factory', если контент не изменяется – NeronLeVelu

ответ

2

Вы можете использовать Grep,

grep -oP '(?<=/)[^/]*(?=-\d+\.)' file 

Пример:

$ var=$(echo 'user/config/jars/content-config-factory-3.2.0.0.jar' | grep -oP '(?<=/)[^/]*(?=-\d+\.)') 
$ echo "$var" 
content-config-factory 
3

Вы можете попробовать этот способ также и получить ожидаемый результат

variable=$(sed 's:.*/\(.*\)-.*:\1:' FileName) 

echo $variable 

Выход:

content-config-factory 
4

awk решение было бы как

awk -F/ '{sub("-[^-]+$", "", $NF); print $NF} 

Test

$ echo "user/config/jars/content-config-factory-3.2.0.0.jar" | awk -F/ '{sub("-[^-]+$", "", $NF); print $NF}' 
content-config-factory 
Смежные вопросы