Можно разбить длинные линии с каре ^
, пока Вы помните, что каре и новая строка после него полностью удалены. Так, если должно быть пространство, где Вы повреждаете строку, включаете пространство. ([еще 113] на этом ниже. )
Пример:
copy file1.txt file2.txt
был бы записан как:
copy file1.txt^
file2.txt
Существует много способов сделать это, например:
удар и подобные оболочки (см. здесь для большего количества информации)
$ 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
Это является самым устойчивым и общим из трех подходов, так как это просто ищет самую длинную строку не -
символы и сохраняет это как версию и все перед версией до последнего -
и сохраняет это как компонент.
Другой 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)}'
awk '{print substr($x,y,z)}'
x - номер столбца
y - стартовая позиция
z - Конечное положение
Используйте следующее в терминале,
$ 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"
Извлечь 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"'