我有一个看起来像这样的文件。这种格式有很多行。
5/10 RED SYSID This is a long message
我想将这些行放在4个以逗号分隔的列中。
5/10,RED,SYSID,This is a long message
如何用逗号替换前三个空格?
答案 0 :(得分:1)
您可以使用PowerShell -split
和-join
运算符执行此操作。
$line -split ' ',3 -join ','
此示例将前三个空格转换为逗号。 -split ' ',3
将字符串拆分为由字符串中前三个空格分隔的四个元素的数组。然后-join ','
将它们重新加入到一个字符串中,每个字符串之间都有一个逗号。
如果您的输入在字段之间有多个空格,则上述操作将无效,因为每个空格都被单独考虑,或者您的字段由其他空格(如制表符)分隔。相反,使用正则表达式分割。
$line -split '\s+',3,"RegexMatch" -join ','
此示例将\s+
的前三个匹配视为分隔符,并将一系列连续的空格转换为单个逗号。
要针对文件中的每一行投放,请使用Get-Content
和Foreach-Object
Get-Content $filename | foreach {
$_ -split '\s+',3,"RegexMatch" -join ','
} | Out-File $newfilename
答案 1 :(得分:0)
这可能是您正在寻找的。 p>
Replace the first occurence of a string in a file
相关代码如下:
$re = [regex]' '
$re.Replace([string]::Join("`n", (gc C:\Path\To\test.txt)), ',', 3)
答案 2 :(得分:0)
以下正则表达式应该做你想要的。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="drag0">!!!!!</div>
<div class="drag1">!!!!!</div>
<div class="drag2">!!!!!</div>
<div class="drag3">!!!!!</div>
<div class="drag4">!!!!!</div>
<div class="drag5">!!!!!</div>
<div class="drag6">!!!!!</div>
<div class="drag7">!!!!!</div>
<div class="drag8">!!!!!</div>
它捕获由空格分隔的四组非空白字符,最后一组包含字符串的其余部分。然后用逗号分隔的相同的四个组替换它们。
要使用它来修改文件中的每个匹配行,请管道$line -replace '^(\S+?) (\S+?) (\S+?) (.*)','$1,$2,$3,$4'
到Get-Content
,最后到Foreach-Object
Out-File
正则表达式不匹配的任何行都将不加改变地发送到输出文件。这包括任何行包含制表符而不是空格。如果您需要在脚本中对此进行测试,则可以首先测试$regex = [regex]'^(\S+?) (\S+?) (\S+?) (.*)','$1,$2,$3,$4'
Get-Content $filename | foreach {
$_ -replace $regex
} | Out-File $newfilename
,如果返回false,则采取适当的操作。