2014-08-27 3 views

ответ

3

Использование регулярных выражений BASH:

baselin[email protected]/vobs/tlv_pvob 

[[ "$baseline" =~ ^([^@]+) ]] && myvar="${BASH_REMATCH[1]}" 

echo "$myvar" 
RAVENPLAT1.5.5.0_1.5.5.0-318_CHASSIS_PKG_193_15-AUG-2014_0350 

ИЛИ еще с помощью BASH струнные манипуляции:

myvar="${baseline%%@*}" 
+0

Спасибо, что она работает – user3502786

+0

Добро пожаловать, рад, что это сработало. – anubhava

4

Использование параметра расширения:

$ baselin[email protected]/vobs/tlv_pvob 
$ echo "${baseline%%@*}" 
RAVENPLAT1.5.5.0_1.5.5.0-318_CHASSIS_PKG_193_15-AUG-2014_0350 
+0

Спасибо, что он работает – user3502786

+0

@JohnB 'b = foo @ bar @ baz; echo "($ {b% @ *})" -> (foo @ bar); echo "($ {b %% @ *})" -> foo'. Итак, нет, вам нужно '%%' здесь. Предполагая, что вы хотите до первого '@', а не до последнего '@'. –

+0

+1 Вы также можете просто сделать это с помощью '$ {baseline% @ *}', поскольку '*' соответствует всем значениям после '@'. –

1

Попробуйте что-то вроде

x = "baselin[email protected]/vobs/tlv_pvob" 
y = "@" 
z = ${x/$y*/$y} 

Не тестировался - может быть, последний символ из г будет удален с помощью что-того похожего на:

${z:0:-1} 
+0

Спасибо, что он работает – user3502786

1

Надеется, что вы имеете только 1 @ в вашей строке -

[email protected] 
echo ` echo $a | tr @ ' ' | awk '{print $1}'` 
+0

Что означает tr? – user3502786

+0

tr переводится или заменяется, я заменял @ пространством - сделал его как 2 (или более) строки и применял awk для получения 1-го столбца/строки. Подробнее tr [link] http://www.computerhope.com/unix/utr.htm – shamik

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