在文件中,我有这样的一行:
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
要清楚,我只想用字符;
代替两个空格
答案 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,但可以除去制表符,更重要的是,可以删除行尾字符。