2013-04-29 2 views
0

У меня есть файл с содержимым ниже. Я получил команду, чтобы напечатать номер версии. Но мне нужно оборвать последнюю часть в файле версиикоманда оболочки для усечения/вырезания части строки

file.spec:

Version: 3.12.0.2 

Команда используется:

VERSION=($(grep -r "Version:" /path/file.spec | awk '{print ($2)}')) 

echo $VERSION 

Токовый выход: 3.12.0.2

Желаемая выходной : 3.12.0

ответ

1

Попробуйте это:

VERSION=($(grep -r "Version:" /path/file.spec| awk '{print ($2)}' | cut -d. -f1-3)) 

Cut разделить строку с разделителем поля (-d), то выберите нужное поле с -f парами.

0

Вы можете использовать этот единственный awk сценарий awk -F'[ .]' '{print $2"."$3"."$4}':

$ VERSION=$(awk -F'[ .]' '{print $2"."$3"."$4}' /path/file.spec) 

$ echo $VERSION 
3.12.0 

Или это одно grep

$ VERSION=$(grep -Po 'Version: \K\d+[.]\d+[.]\d' /path/file.spec) 

$ echo $VERSION 
3.12.0 

Но вы никогда не нужно grep и awk вместе.

0

если вы только grep одиночный файл, -r не имеет смысла.

также основан на выходе командной строки, это Grep должно работать:

grep -Po '(?<=Version:)(\d+\.){2}\d+' /path/file.spec 

дает:

3.12.0 

\K тоже приятно. работал на фиксированную/нефиксированную длину. (начиная с PCRE 7.2). В этом есть еще один ответ. но я чувствую, что смотреть сзади легче читать, если фиксированная длина.

3

Там нет absolutey нет необходимости во внешних инструментов, таких как awk, sed и т.д. для этой простой задачи, если ваша оболочка является POSIX-совместимой (что должно быть) и поддерживает parameter expansion:

$ cat file.spec 
Version: 3.12.0.2 
$ version=$(<file.spec) 
$ version="${version#* }" 
$ version="${version%.*}" 
$ echo "${version}" 
3.12.0 
Смежные вопросы