如何在Powershell中为文件中的每一行使用正则表达式

时间:2018-08-02 11:12:37

标签: regex powershell

在文件中,我有这样的一行:

I     have lot         of spaces in      me.

然后我用此powershell代码用一个空格替换每个空格:

$String = "I     have lot         of spaces in      me."
while ($String.Contains("  "))
{
$String = $String -replace "  "," "}

结果是:

I have lot of spaces in me.

我想对txt文件中的每一行执行此操作。你能给我最好的方法吗?


第二部分:

仅当空白多个时,如何才能替换某些内容? ;

响应将是:

;4828;toto;toto;Ticket;0112APPT

而不是:

;4828;toto toto;Ticket;0112APPT

要清楚,我只想用字符;代替两个空格

2 个答案:

答案 0 :(得分:5)

就像我在评论中说的那样,这应该为您做到(至少在我的测试中):

Get-Content yourfile.txt | % {$_ -replace '\s+', ' '}

说明:

Get-Content-从给定的文件中获取内容

| %-从Get-Content

给定的内容的每一行

$_ -replace '\s+', ' '-'\s+'代表一个或多个空格


如果要使用替换后的字符串更改文件的内容,还可以将其通过管道传输到Set-Content并将其保存在另一个文件中:

Get-Content yourfile.txt | % {$_ -replace '\s+', ' '} | Set-Content yourOutputFile.txt

  

如果要写入管道中的同一文件,请查看:Why you dont do it!


考虑到您要忽略正则表达式中的单个空格的第二个问题,如果要用;替换一个以上的whitspace,这将是您的做法。

这不会用单个空格替换斑点:

Get-Content yourfile.txt | % {$_ -replace '\s\s+', ';'}

答案 1 :(得分:3)

您可以这样做:

(Get-Content '.\TextDocument.txt' -Raw) -replace ' +', ' '

请注意,可以选择使用\s代替RegEx中的实际空间,但是它将删除not just spaces,但可以除去制表符,更重要的是,可以删除行尾字符。

>