2011-01-28 3 views
1

Я Tyring, чтобы захватить сборки Verson из файла, который содержит следующую строку:Создание регулярных выражений для разбора билда

<Assembly: AssemblyVersion("004.005.0862")> 

, и я хотел бы его вернуть

4.5.862 

Я использую СЭД в DOS и получил следующий выплюнуть 004.005.0862

echo "<Assembly: AssemblyVersion("004.005.0862")>" | sed "s/[^0-9,.]//g" 

Как избавиться от ведущих нулей для каждой части го e построить номер?

+0

Вашего 'echo' должен иметь внешние одинарные кавычки вместо двойных кавычек, так что внутренние котировки являются частью строки в кавычках. –

ответ

2

Регулярное выражение, чтобы сделать это в один шаг выглядит это:

 
^.*"0*([0-9]+\.)0*([0-9]+\.)0*([0-9]+).* 

с SED конкретных побега и как полное выражение, оно становится немного больше:

 
s/^.*"0*\([0-9]\+\.\)0*\([0-9]\+\.\)0*\([0-9]\+\).*/\1\2\3/g 

Регулярное выражение ломается, как

 
    ^   # start-of-string 
    .*"   # anything, up to a double quote 
    0*([0-9]+\.) # any number of zeros, then group 1: at least 1 digit and a dot 
    0*([0-9]+\.) # any number of zeros, then group 2: at least 1 digit and a dot 
    0*([0-9]+) # any number of zeros, then group 3: at least 1 digit 
    .*   # anything up to the end of the string 
+0

Очень приятно! Что делает \ 1 \ 2 \ 3 в конце выражения sed? – fasttimes

+0

@fasttimes: они выводят группы захвата (что соответствует между '\ (' и '\)'). –

0

Возможно ... | sed "s/[^0-9]*0*([1-9][0-9,.]*)/\1/g". Я использую подшаблон, чтобы отфильтровать нужную вам часть, игнорируя ведущие нули и нечисловые символы.

0

Есть, вероятно, многие другие умные способы, но один, который работает (и достаточно легко понять) является по конвейеру через дополнительные вызовы:

echo "version(004.005.0862)" | sed "s/[^0-9,.]//g" | sed "s/^0*//g" | sed "s/\.0*/./g" 
+0

Просто потому, что мне любопытно, что я хочу увидеть умную версию, но ваш путь отлично работает! – fasttimes

+0

Аргументы могут быть сделаны в любом случае, но для подобных вещей мне больше нравятся более простые (хотя, возможно, менее технически изящные) решения. Это может быть приятнее, когда приходит следующий человек и должен выяснить, что это значит. –

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