【问题标题】:Powershell - Regex & Split / Replace CharacterPowershell - 正则表达式和拆分/替换字符
【发布时间】:2019-01-30 18:44:33
【问题描述】:

我想将一个 txt 块格式化为一个数组。 首先,我试图删除单双“|”仅限。

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

然后,用逗号替换remaning "|"

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%)

当我尝试 -replace "|"," " 时,我得到了这个,这不是我想要的:

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

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 "|"," "

感谢您的帮助!

【问题讨论】:

  • 您是否尝试过自己解决这个问题?请edit the question 发布您的代码并展示您的尝试,有人会帮助您。
  • 感谢您的帮助,很有用...

标签: regex string powershell replace split


【解决方案1】:

如果我对问题的理解正确,您希望删除文本中的所有 |||,并将出现在一组三个或三个以上的管道字符替换为逗号。

我认为最好颠倒你的逻辑,首先用逗号替换一组 3 个或更多的管道字符,然后删除所有剩余的 | 字符。最后将文本拆分成一个数组,如下所示:

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

在哪里

\|{3,} 搜索东 3 个字符的 | 字符
\| 搜索剩余的 | 字符(现在它们只能存在单个或两个字符)

| 字符需要为正则表达式的反斜杠转义符)

\r?\n 最终会将文本块转换为基于每行末尾的“换行符”的行数组。

代码将返回一个数组,如:

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,恐怕您需要(手动)更正.

【讨论】:

  • 这是一个好的开始,非常感谢!当我找到解决方案时,我会发布它;)
猜你喜欢
  • 2013-11-19
  • 1970-01-01
  • 2012-06-20
  • 2016-02-13
  • 1970-01-01
  • 2016-02-15
  • 2019-04-17
  • 2021-10-13
  • 1970-01-01
相关资源
最近更新 更多