одна строка perl скрипт
perl -pe '($_)=/([0-9]+([.][0-9]+)+)/' YOURFILE.TXT
или чуть дольше, но обрабатывает несколько версий:
perl -nle 'print $v if ($v)=/([0-9]+([.][0-9]+)+)/' YOURFILE.TXT
примеры использования первой командной строки
$> V=$(perl -pe '($_)=/([0-9]+([.][0-9]+)+)/'<<<'adcheck (CentrifyDC 4.4.3-421)')
$> echo "$V"
4.4.3
$> V=$(perl -pe '($_)=/([0-9]+([.][0-9]+)+)/' <<< 'dos2unix-8.2.3-beta.zip')
$> echo "$V"
8.2.3
$> echo 'A2 33. Z-0.1.2.3.4..5' | perl -pe '($_)=/([0-9]+([.][0-9]+)+)/'
0.1.2.3.4
$> gcc --version | perl -pe '($_)=/([0-9]+([.][0-9]+)+)/'
4.7.3
$> bash --version | perl -pe '($_)=/([0-9]+([.][0-9]+)+)/'
4.2.45
$> meld --version | perl -pe '($_)=/([0-9]+([.][0-9]+)+)/'
1.6.1
$> uname -a | perl -pe '($_)=/([0-9]+([.][0-9]+)+)/'
3.8.0
$> perl -pe '($_)=/([0-9]+([.][0-9]+)+)/' /etc/issue
13.04
Примечание: первая командная строка извлекает версию без окончательного возврата каретки (я имею в виду \n
). Если это проблема, используйте вторую версию или оберните первую командную строку внутри echo
:
$> echo $( perl --version | perl -pe '($_)=/([0-9]+([.][0-9]+)+)/' )
5.14.2
К сожалению, если есть несколько строк, содержащих номера версий, эти номера версий будут объединены:
$> echo $(gwenview --version | perl -pe '($_)=/([0-9]+([.][0-9]+)+)/' )
4.8.44.10.54.10.4
Чтобы извлечь одну версию на строку, необходимо изменить однострочный скрипт:
perl -pe 'if(($_)=/([0-9]+([.][0-9]+)+)/){$_.="\n"}'
пример:
$> gwenview --version | perl -pe 'if(($_)=/([0-9]+([.][0-9]+)+)/){$_.="\n"}'
4.8.4
4.10.5
4.10.4
Чтобы извлечь только первый номер версии и добавление возврата каретки (я имею в виду новую строку \n
), я советую:
perl -pe 'if(($v)=/([0-9]+([.][0-9]+)+)/){print"$v\n";exit}$_=""'
пример:
$> gwenview --version | perl -pe 'if(($v)=/([0-9]+([.][0-9]+)+)/){print"$v\n";exit}$_=""'
4.8.4
Для справки, моя попытка sed не так хороша. Кто знает, как получить то же поведение, что и мои perl
сценарии, но с использованием sed
?
sed 's/\([0-9][0-9]*[.][0-9][0-9.]*\)/\n\1/'
Если вы считаете, что можете улучшить эти сценарии, пожалуйста, оставьте комментарий:)