2016-01-19 3 views
0

У меня есть файл Podfile.lock, и я хочу извлечь из него версию рамки (без круглых скобок). Вот как выглядит строка:Извлечь слово из файла

PODS: 
- MyPrivateFramework (1.0.2.34) 

Я пытаюсь использовать sed, но ничего не работает.

Я пробовал много вещей, и это последняя:

VERSION=$(sed 's/.*MyPrivateFramework (/\1/' Podfile.lock) 
echo $VERSION 

не повезло .. Может кто-нибудь мне помочь?

ответ

1

Youre на правильном пути; но есть много вариантов. Вот один с помощью awk и cut:

VERSION=$(awk '/MyPrivateFramework/ { print $3 }' Podfile.lock | cut -d '(' -f 2 | cut -d ')' -f 1) 
echo $VERSION 

дает:

1.0.2.34 
+0

Не работает :( –

+0

то, что вы дадите? –

+0

Ок. Отредактированная строка теперь дает: «1.0.2.34 =» –

1

Использование grep -oP:

grep -oP 'MyPrivateFramework \(\K[^)]+' file 
1.0.2.34 

Использование sed:

sed -n 's/.*MyPrivateFramework (\([^)]*\).*/\1/p' file 
1.0.2.34 
+0

как обычно 15 миллионов возможностей сделать это. Преимущество: вы используете только одну программу! –

+0

К сожалению, это не работает –

+0

При отображении ввода обе команды работают нормально. – anubhava

2

awk на помощь!

$ awk -F'[()]' '/MyPrivateFramework/{print $(NF-1)}' file 

1.0.2.34 

Объяснение: установить разделитель полей, чтобы открыть/закрыть скобку, найти строку с ключевым словом, распечатать предпоследнее поле.

UPDATE: вы можете назначить выход на переменную, как обычно

$ version=$(awk -F'[()]' '/MyPrivateFramework/{print $(NF-1)}' pods); echo $version 
1.0.2.34 
+0

Это работает, но он печатает результат. Мне нужно только поставить версию внутри переменной –

+1

@NimrodShai, затем перейдите и используйте переменную для хранения номера версии. –

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