Как извлечь часть номера версии из строки версии?

Можно разбить длинные линии с каре ^, пока Вы помните, что каре и новая строка после него полностью удалены. Так, если должно быть пространство, где Вы повреждаете строку, включаете пространство. ([еще 113] на этом ниже. )

Пример:

copy file1.txt file2.txt

был бы записан как:

copy file1.txt^
 file2.txt

5
задан 14.05.2020, 16:40

4 ответа

Существует много способов сделать это, например:

  • удар и подобные оболочки (см. здесь для большего количества информации)

    $ string=customer-asset-tag-1.0.2.9
    $ echo -e "Component: ${string:0:18}\nVersion: ${string:19}"
    Component: customer-asset-tag
    Version: 1.0.2.9
    
  • awk

    $ echo $string | awk -F- -v OFS=- '{print "Component: "$1,$2,$3; print "Version: "$4}'
    Component: customer-asset-tag
    Version: 1.0.2.9
    

    Здесь, мы - разделитель полей установки awk к - (это используется для определения полей, 1-е поле $1, 2-е $2 и т.д.). Мы также устанавливаем выходного разделителя полей на -, таким образом, он распечатает правильно.

  • perl

    $ echo $string | perl -ne '/(.*)-([^-]+)/; print "Component: $1\nVersion: $2"'
    Component: customer-asset-tag
    Version: 1.0.2.9
    

    Это является самым устойчивым и общим из трех подходов, так как это просто ищет самую длинную строку не - символы и сохраняет это как версию и все перед версией до последнего - и сохраняет это как компонент.

4
ответ дан 14.05.2020, 16:41
  • 1
    @AvinashRaj, который является классическим форматом, используемым в *, отклоняет мир для представления подсказки. Это помогает дифференцироваться, какая часть текстового блока является командой и который является command' s вывод. Я склонен использовать его каждый раз, когда я показываю и команду и ее вывод. – Sanjeevakumar Hiremath 14.05.2020, 16:41
  • 2
    никакая потребность представить $ перед командами. – pickypg 14.05.2020, 16:41
  • 3
    @AvinashRaj, В то время как ре обычно осуждают подсказки здесь, terndon, не дает команды пользователю так же как заключение в кавычки вывода, таким образом, it' s прекрасный. – Neil Knight 14.05.2020, 16:42

Другой awk команда,

$ string=customer-asset-tag-1.0.2.9
$ echo "Component= "$(echo $string | awk '{print substr($1,1,18)}') && echo "Version number="$(echo $string | awk '{print substr($1,20)}')
Component= customer-asset-tag
Version number=1.0.2.9

Описание:

  • echo $string - отображает значение, присвоенное переменной строке.

  • echo $string | awk '{print substr($1,1,18)}'

    • | - стандартный вывод питался, как введено к следующей команде.

    • substr($1,1,18) - От входа берут первый столбец и отображают только символы, запускающиеся от положения 1 - 18 до стандартного вывода.

  • echo $string | awk '{print substr($1,20)}'

    • Дисплей символы, начинающие с 20-го положения в первом столбце от стандартного входа.
<час>
awk '{print substr($x,y,z)}'

x - номер столбца
y - стартовая позиция
z - Конечное положение

2
ответ дан 14.05.2020, 16:41

Используйте следующее в терминале,

$ string=customer-asset-tag-1.0.2.9
$ ver=$(echo $string | awk -F- '{print $NF}')
$ Component=${string/-$ver/}
$ echo "version number=$ver"
version number=1.0.2.9
$ echo "Component=$Component"
Component=customer-asset-tag

или в сценарии оболочки,

#!/bin/bash
string=customer-asset-tag-1.0.2.9
ver=$(echo $string | awk -F- '{print $NF}')
Component=${string/-$ver/}
echo "version number=$ver"
echo "Component=$Component"
3
ответ дан 14.05.2020, 16:41

Извлечь Perl номера версии

echo "customer-asset-tag-1.0.2.9"  | sed 's/[a-z-]//g'

способ сделать его

echo "customer-asset-tag-1.0.2.9"  | perl -ne  '/([a-z-]*)-([\d+.+]*)/; print "Component= $1\nVersion= $2\n"'
3
ответ дан 14.05.2020, 16:42

Теги

Похожие вопросы