Если я правильно понимаю ваш вопрос, то получается то, что вы хотите:
$ echo "AA" | xxd -b | sed -E 's/ 0| .*//g'
00000000:100000110000010001010
Ключевое изменение здесь - это использование двух пробелов перед .*
, так что это соответствует только той части, которую вы хочу удалить.
В качестве альтернативы, мы можем сначала удалить пустой ноль:
$ echo "AA" | xxd -b | sed -E 's/ 0//g; s/ .*//'
00000000:100000110000010001010
Я не знаю, почему Ваша версия не работает. Это должно работать. Вот более ужасная версия, которая работает.
$p = "subject=([A-Z\.]+),"
select-string -path *.txt -pattern $p | % {$_ -match $p > $null; $matches[1]}
Объяснение:
-match
оператор соответствия регулярного выражения:
>"foobar" -match "oo.ar"
True
> $null
просто подавляет Истинное, записанное в вывод. (Попытайтесь удалить его.) Существует cmdlet, который делает то же самое, имя которого я не вспоминаю в данный момент.
$matches
волшебная переменная, которая содержит результат последнего -match
операция.
Узнав много из всех других ответов, я смог получить то, что я хочу использовать следующую строку:
gci *.txt | gc | %{ [regex]::matches($_, "subject=([A-Z\.]+),") } | %{ $_.Groups[1].Value }
Это чувствовало себя прекрасно, поскольку я только выполнял regex однажды на строку и поскольку я вводил это в командной строке, было хорошо не иметь несколько строк кода.
Проблема с кодом, который Вы вводите, состоит в том, что избранная строка не передает фактический объект Regex. Вместо этого это передает другой класс под названием MatchInfo, который не имеет фактической информации соответствий regex.
Если Вы только хотите выполнить regex однажды, необходимо будет прокрутиться, Вы - собственная функция, которая не является слишком трудной.
function Select-Match() {
param ($pattern = $(throw "Need a pattern"),
$filePath = $(throw "Need a file path") )
foreach ( $cur in (gc $filePath)) {
if ( $cur -match $pattern ) {
write-output $matches[0];
}
}
}
gci *.txt | %{ Select-Match "subject=([A-Z\.]+)," $_.FullName }
Еще одна опция
gci *.txt | foreach { [regex]::match($_,'(?<=subject=)([^,]+)').value }
См. эти примечания по Регулярным выражениям в PowerShell
Закомите состояние открытых / закрытых строк в формате строки запроса (например, «Open = ROW1 + ROW5 + ROW10») и пропустите эту строку в URL-адреса в недавно открытое окно (например, «Host.com/blah.html) ? Open = Row1 + ROW5 + ROW10 "). На целевой странице в функции onload осмотрите объект местоположения и разверните эти ряды еще раз.
-121--3003442-В PowerShell V2 CTP3 свойство совпадения реализована. Так что следующее будет работать:
select-string -path *.txt -pattern "subject=([A-Z\.]+)," | %{ $_.Matches[0].Groups[1].Value }
Другой вариант, сопоставление 7 цифр в строке
echo "123456789 hello test" | % {$_ -match "\d{7}" > $null; $matches[0]}
Возврат: 1234567