Powershell - Regex & Split / Replace Character - PullRequest
0 голосов
/ 24 августа 2018

Я хотел бы отформатировать блок txt в массив. Во-первых, я пытаюсь удалить один двойной "|" только.

Alert|data|set > Alertdataset
380 032|(||0%) > 380 032(0%)

Затем замените оставшиеся слова " | " на кома

set|||||||||||||||||Raw > set,Raw

Итак, это:

Dataset|name|||||||||||||||||||Aggregation|name|||||Max|Age|||||Current|Size,|Kb
------------------------------|--------------------|-------|--------------------
Alertdata|set|||||||||||||||||Raw|data|||||||||||||||||400|||||||380 032|(||0%)

Будет это:

Dataset,name,Aggregationname,MaxAge,CurrentSizeKb
------------------------------|--------------------|-------|--------------------
Alertdataset,Rawdata,400,380 032(0%)

Когда я пытаюсь -заменить "|", "", я получаю это, а это не то, что я хочу:

PS> $ tmp -relace "|", ""

D
a
t
a
s
e
t
|
n
a
m
e
|
|
|
|
|
|
|

Я не знаю, как разделить только один или два символа, а не все.

Блок текста (Источник):

Dataset|name|||||||||||||||||||Aggregation|name|||||Max|Age|||||Current|Size,|Kb
------------------------------|--------------------|-------|--------------------
Alert|data|set|||||||||||||||||Raw|data|||||||||||||||||400|||||||380 032|(||0%)
Client|Monitoring|data|set|||||Raw|data||||||||||||||||||30|||||||||||||0|(||0%)
Client|Monitoring|data|set|||||Daily|aggregations|||||||400||||||||||||96|(||0%)
Configuration|dataset||||||||||Raw|data|||||||||||||||||400|||||9 481 776|(||3%)
Event|data|set|||||||||||||||||Raw|data|||||||||||||||||100||||14 872 112|(||5%)
Exchange|2013:|Mailbox|Database|data|warehouse|dataset|Raw|data||||||||||||||||||30|||||||||||288|(||0%)
Exchange|2013:|Mailbox|statistics|data|warehouse|dataset|Raw|data||||||||||||||||||30|||||||356 064|(||0%)
Exchange|2013:|Mailbox|statistics|data|warehouse|dataset|Daily|aggregations|||||||400|||||||207 168|(||0%)
MPXAXD|Machine|DataSet|||||||||Raw|data||||||||||||||||||10|||||||||||||0|(||0%)
MPXAXD|Machine|DataSet|||||||||Hourly|aggregations||||||400|||||||||||||0|(||0%)
MPXAXD|Machine|DataSet|||||||||Daily|aggregations|||||||400|||||||||||||0|(||0%)
MPXAXD|Machine|DataSet|||||||||Comtrade|raw|(100)||||||9999|||||||||||576|(||0%)
MPXAXD|Session|DataSet|||||||||Raw|data||||||||||||||||||10|||||||||||||0|(||0%)
MPXAXD|Session|DataSet|||||||||Hourly|aggregations||||||400|||||||||||||0|(||0%)
MPXAXD|Session|DataSet|||||||||Daily|aggregations|||||||400|||||||||||||0|(||0%)
MPXAXD|Session|DataSet|||||||||Comtrade|raw|(100)|||||||400|||||||||7 488|(||0%)
MPXAXD|Session|DataSet|||||||||Comtrade|raw|(101)|||||||400|||||||||5 496|(||0%)
MPXAXD|Session|DataSet|||||||||Comtrade|raw|(102)|||||||400|||||||||3 672|(||0%)
MPXAXD|Session|DataSet|||||||||Comtrade|raw|(103)|||||||400|||||||||1 120|(||0%)
MPXAXD|Session|DataSet|||||||||Comtrade|raw|(104)||||||9999||||||||||||64|(||0%)
Performance|data|set|||||||||||Raw|data||||||||||||||||||10||||19 407 512|(||6%)
Performance|data|set|||||||||||Hourly|aggregations||||||120|||112 011 928|(|37%)
Performance|data|set|||||||||||Daily|aggregations|||||||400||||17 147 640|(||6%)
State|data|set|||||||||||||||||Raw|data|||||||||||||||||180|||||1 589 624|(||1%)
State|data|set|||||||||||||||||Hourly|aggregations||||||120|||115 880 112|(|38%)
State|data|set|||||||||||||||||Daily|aggregations|||||||400||||12 532 360|(||4%)

Что я пробовал:

13 $trim
14 $trim.trim()
15 $trim.trim() | ConvertFrom-String -PropertyNane "Dataset name"
16 $trim.trim() | ConvertFrom-String -PropertyName "Dataset name"
17 $trim.split(' ','')
18 $trim
19 $trim -split(' ','')
20 $trim -split(" ","")
21 $trim.split("`n")
22 $trim
23 $trim.split("`n`r")
24 $trim.split("`n",' ')
25 $trim -split "\s{1,}"
26 $trim -split "\s{1,}"
27 $trim -split "\s{2,}"
28 $trim -split "\s{5,}"
29 $trim -split "\s{10,}"
30 $trim -split "\s{50,}"
31 $trim -split "\s{,1}"
32 $trim -split "\s{0,}"
33 $trim -split "\s{1,1}"
34 $trim
35 $trim  -replace '(([a-z]) ([A-Z]))','(([a-z])([A-Z]))'
36 $trim  -replace ' ',''
37 $trim  -replace (' ','|')
38 $tmp = $trim  -replace (' ','|')
39 $tmp1 = $tmp -replace ('|','')
40 $tmp1
41 $tmp1 = $tmp -split ('|','')
42 $tmp1
43 $tmp
44 $tmp -replace ('|','')
45 $tmp -replace ('\|','')
46 $tmp -split '|'
47 $tmp -replace ('\|')
48 $tmp -replace ('\|','')
49 $tmp -replace ('\|','')
50 $tmp -replace ('\|','')
51 $tmp1 = $tmp -split ('|','')
52 $tmp1
53 $tmp1 = $tmp -split ('|','')
54 $tmp1 -replace ',',''
55 $tmp1 -replace '\n',''
56 $tmp1.Split([Environment]::NewLine)
57 $tmp1 -split "`r`n"
58 $tmp1 -replace "`n",", " -replace "`r",", "
59 $tmp
60 $tmp1 -replace "|"," ,(1,)" -replace "`r",", "
61 $tmp1 -replace "|"," ,{1,}" -replace "`r",", "
62 $tmp1 -replace "|"," " -replace "`r",", "
63 $tmp1
64 $tmp
65 $trim
66 $trim -replace ' ','_'
67 $tmp
68 $trim
69 $trim | ConvertTo-Html
70 $trim | ConvertTo-Html -As Table
71 $trim
72 $trim.tostring()
73 $trim
74 [string]$trim
75 $tmp1
76 $tmp
77 $tmp1 -replace "|"," "
78 -replace "|"," "-replace "|"," "
79 -replace "|"," "

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 24 августа 2018

Если я правильно понял вопрос, вы хотите удалить все | или || в тексте, а также заменить все появления символа канала, которые входят в набор из трех или более, запятой.

Я думаю, что лучше изменить свою логику и сначала заменить все символы канала в наборе из 3 или более запятыми, а затем удалить все оставшиеся | символы. Наконец разделите текст на массив, например так:

($text -creplace '\|{3,}', ',' -creplace '\|', '') -split '\r?\n' 

, где

\|{3,} ищет символ | там, где на востоке 3 из них
\| выполняет поиск оставшихся | символов (теперь они могут существовать только одинарные или двойные)

(символ | должен быть экранирован с обратной косой чертой для регулярного выражения)

Наконец, \r?\n преобразует текстовый блок в массив строк на основе 'Newline' в конце каждой строки.

Код вернет массив вроде:

Datasetname,Aggregationname,MaxAge,CurrentSize,Kb
-----------------------------------------------------------------------------
Alertdataset,Rawdata,400,380 032(0%)
ClientMonitoringdataset,Rawdata,30,0(0%)
ClientMonitoringdataset,Dailyaggregations,400,96(0%)
Configurationdataset,Rawdata,400,9 481 776(3%)
Eventdataset,Rawdata,100,14 872 112(5%)
Exchange2013:MailboxDatabasedatawarehousedatasetRawdata,30,288(0%)

Это начинает выглядеть как CSV, но, как вы можете видеть, полевые данные смещены с Exchange2013: Если CSV - то, что вы хотите в конце, вам нужно (вручную) исправить это, я боюсь .

...