Какими персонажами вы должны и которые вы не должны убежать, действительно зависит от того, с чем вы работаете.
Для PCRE и большинства других так называемых Perl-совместимых ароматов избегайте этих внешних классы символов:
.^$*+?()[{\|
и эти внутренние классы символов:
^-]\
Для POSIX расширенных регулярных выражений (ERE), избегайте этих внешних классов символов (таких же, как PCRE):
.^$*+?()[{\|
Выключение любых других символов является ошибкой с POSIX ERE.
Внутри классов символов обратная косая черта является буквальным символом в регулярных выражениях POSIX. Вы не можете использовать его, чтобы избежать чего-либо. Вы должны использовать «умное размещение», если хотите включить метасимволы класса символов в виде литералов. Поместите ^ в любом месте, кроме как в начале, в начале, а в начале или в конце класса символов, чтобы соответствовать этим буквально, например:
[]^-]
В основных регулярных выражениях POSIX (BRE), это метасимволы, которые вам нужно убежать, чтобы подавить их смысл:
.^$*
Выпуски из круглых скобок и фигурных скобок в BRE дают им особый смысл, который их неописуемые версии имеют в ERE. Некоторые реализации (например, GNU) также придают особое значение другим символам при экранировании, например \? и +. Сброс символа, отличного от. ^ $ * () {}, Как правило, является ошибкой с BRE.
Внутри классов символов BRE следуют тому же правилу, что и ERE.
Если все это делает голова спина, возьмите копию RegexBuddy . На вкладке «Создать» нажмите «Вставить маркер», а затем «Литерал». RegexBuddy добавит экраны при необходимости.
Использование лучшего паттерна
$Pattern = '^Backup-ID|^Policy|^Primary Copy|^Expires|^Copy Number|^Fragment Size|^Expires|^MediaID'
и RegEx для разделения выходного сигнала на Backup-ID
(Get-Content .\test.txt|Select-String -Pattern $Pattern|Out-String) -split "(?=Backup-ID)"|ForEach-Object {
(( Использование лучшего паттерна
[110] и RegEx для разделения выходного сигнала на Backup-ID
[111] <час> hostname01,VM_weekly,23,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX122,3,6188832,1/5/2024 3:19:13 AM,XXX134
hostname02,VM_weekly2,24,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX244,3,6188832,1/5/2024 3:19:13 AM,XXX199,4,6188832,1/5/2024 3:19:13 AM,XXX177
-split "`r?`n" | %{( Использование лучшего паттерна
[110] и RegEx для разделения выходного сигнала на Backup-ID
[111] <час> hostname01,VM_weekly,23,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX122,3,6188832,1/5/2024 3:19:13 AM,XXX134
hostname02,VM_weekly2,24,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX244,3,6188832,1/5/2024 3:19:13 AM,XXX199,4,6188832,1/5/2024 3:19:13 AM,XXX177
-split ":\s+",2)[1]}) -join ',').Trim(',')
}
<час> hostname01,VM_weekly,23,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX122,3,6188832,1/5/2024 3:19:13 AM,XXX134
hostname02,VM_weekly2,24,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX244,3,6188832,1/5/2024 3:19:13 AM,XXX199,4,6188832,1/5/2024 3:19:13 AM,XXX177
Это может быть?
& {
$current = $null
switch -regex -file 'C:\text.txt' {
'^(Backup-ID|Policy|Primary Copy|Expires|Copy Number|Fragment Size \(KB\)|Expires|MediaID):\s+(.*)' {
if ($matches[1] -eq "Backup-ID") {
if ($current) { $current.ToString() }
$current = [Text.StringBuilder]::new()
[void]$current.Append($matches[2])
}
else {
[void]$current.Append(",").Append($matches[2])
}
}
}
$current.ToString()
}
Вот мой подход старой школы:
$line = ''
Get-Content C:\test.txt |
Select-String -Pattern 'Backup-ID: ' ,'Policy: ' ,'Primary Copy: ' ,'Expires: ' ,'Copy Number: ' , 'Fragment Size ' ,'Expires: ' , 'MediaID:' |
ForEach-Object {
$aux = Вот мой подход старой школы:
[110] Вывод :
D:\PShell\SO\54921319.ps1
hostname01,VM_weekly,23,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX122,3,6188832,1/5/2024 3:19:13 AM,XXX134
hostname02,VM_weekly2,24,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX244,3,6188832,1/5/2024 3:19:13 AM,XXX199,4,6188832,1/5/2024 3:19:13 AM,XXX177
blockquote> Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .
$xArr = D:\PShell\SO\54921319.ps1
$xCsv = $xArr | ConvertFrom-Csv -Header $(1..30|%{"a Вот мой подход старой школы:
[110] Вывод :
[111] [112] blockquote> Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .
[113] Конечно, вы можете вычислить
- фактический верхний предел для
-Header $(1..30|%{"a Вот мой подход старой школы:
[110] Вывод :
[111] [112] blockquote> Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .
[113] Конечно, вы можете вычислить
- фактический верхний предел для [114] вместо оцененного
30
, например. как ($xArr | % { Вот мой подход старой школы:
[110] Вывод :
[111] [112] blockquote> Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .
[113] Конечно, вы можете вычислить
- фактический верхний предел для [114] вместо оцененного [115], например. как [116],
- или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого
Copy Number
внутри данного Backup-ID
) [1120 ].Split(',').Count}|Measure-Object -Maximum).Maximum
, - или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого
Copy Number
внутри данного Backup-ID
) [1120 ]"})
вместо оцененного 30
, например. как ($xArr | % { Вот мой подход старой школы:
[110] Вывод :
[111] [112] blockquote> Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .
[113] Конечно, вы можете вычислить
- фактический верхний предел для [114] вместо оцененного [115], например. как [116],
- или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого
Copy Number
внутри данного Backup-ID
) [1120 ].Split(',').Count}|Measure-Object -Maximum).Maximum
, - или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого
Copy Number
внутри данного Backup-ID
) [1120 ]"})
$xcsv | Export-Csv -NoTypeInformation -Path c:\temp\result.csv
Конечно, вы можете вычислить
- фактический верхний предел для
-Header $(1..30|%{"a Вот мой подход старой школы:
[110] Вывод :
[111] [112] blockquote> Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .
[113] Конечно, вы можете вычислить
- фактический верхний предел для [114] вместо оцененного
30
, например. как ($xArr | % { Вот мой подход старой школы:
[110] Вывод :
[111] [112] blockquote> Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .
[113] Конечно, вы можете вычислить
- фактический верхний предел для [114] вместо оцененного [115], например. как [116],
- или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого
Copy Number
внутри данного Backup-ID
) [1120 ].Split(',').Count}|Measure-Object -Maximum).Maximum
, - или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого
Copy Number
внутри данного Backup-ID
) [1120 ]"})
вместо оцененного 30
, например. как ($xArr | % { Вот мой подход старой школы:
[110] Вывод :
[111] [112] blockquote> Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .
[113] Конечно, вы можете вычислить
- фактический верхний предел для [114] вместо оцененного [115], например. как [116],
- или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого
Copy Number
внутри данного Backup-ID
) [1120 ].Split(',').Count}|Measure-Object -Maximum).Maximum
, - или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого
Copy Number
внутри данного Backup-ID
) [1120 ] -split ':',2 # only 2 substrings
if ($aux[0] -eq 'Backup-ID') {
if ( $line -ne '' ) { $line } # Write-Output (current line)
$line = $aux[1].Trim()
} else {
$line += ',' + $aux[1].Trim()
}
}
$line # Write-Output (last line)
Вывод :
D:\PShell\SO\54921319.ps1
blockquote>hostname01,VM_weekly,23,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX122,3,6188832,1/5/2024 3:19:13 AM,XXX134 hostname02,VM_weekly2,24,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX244,3,6188832,1/5/2024 3:19:13 AM,XXX199,4,6188832,1/5/2024 3:19:13 AM,XXX177
Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .
$xArr = D:\PShell\SO\54921319.ps1 $xCsv = $xArr | ConvertFrom-Csv -Header $(1..30|%{"a
Вот мой подход старой школы:
[110]Вывод :
[111][112] blockquote>Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .
[113]Конечно, вы можете вычислить
- фактический верхний предел для
-Header $(1..30|%{"a
вместо оцененногоВот мой подход старой школы:
[110]Вывод :
[111][112] blockquote>Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .
[113]Конечно, вы можете вычислить
- фактический верхний предел для [114] вместо оцененного
30
, например. как($xArr | % {
,Вот мой подход старой школы:
[110]Вывод :
[111][112] blockquote>Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .
[113]Конечно, вы можете вычислить
- фактический верхний предел для [114] вместо оцененного [115], например. как [116],
- или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого
[1120 ].Split(',').Count}|Measure-Object -Maximum).MaximumCopy Number
внутри данногоBackup-ID
)- или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого
[1120 ]"})Copy Number
внутри данногоBackup-ID
)30
, например. как($xArr | % {
,Вот мой подход старой школы:
[110]Вывод :
[111][112] blockquote>Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .
[113]Конечно, вы можете вычислить
- фактический верхний предел для [114] вместо оцененного [115], например. как [116],
- или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого
[1120 ].Split(',').Count}|Measure-Object -Maximum).MaximumCopy Number
внутри данногоBackup-ID
)- или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого
[1120 ]"}) $xcsv | Export-Csv -NoTypeInformation -Path c:\temp\result.csvCopy Number
внутри данногоBackup-ID
)Конечно, вы можете вычислить
- фактический верхний предел для
-Header $(1..30|%{"a
вместо оцененногоВот мой подход старой школы:
[110]Вывод :
[111][112] blockquote>Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .
[113]Конечно, вы можете вычислить
- фактический верхний предел для [114] вместо оцененного
30
, например. как($xArr | % {
,Вот мой подход старой школы:
[110]Вывод :
[111][112] blockquote>Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .
[113]Конечно, вы можете вычислить
- фактический верхний предел для [114] вместо оцененного [115], например. как [116],
- или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого
[1120 ].Split(',').Count}|Measure-Object -Maximum).MaximumCopy Number
внутри данногоBackup-ID
)- или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого
[1120 ]"})Copy Number
внутри данногоBackup-ID
)30
, например. как($xArr | % {
,Вот мой подход старой школы:
[110]Вывод :
[111][112] blockquote>Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .
[113]Конечно, вы можете вычислить
- фактический верхний предел для [114] вместо оцененного [115], например. как [116],
- или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого
[1120 ].Split(',').Count}|Measure-Object -Maximum).MaximumCopy Number
внутри данногоBackup-ID
)- или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого
[1120 ]Copy Number
внутри данногоBackup-ID
)