2012-07-17 178 views
2

有没有办法使用foreach和替换文本文件来改变一个字符与换行符和x的缩进数?特殊的请求,但它是使其在另一个程序中可读。替换字符与缩进和换行符在powershell

示例文本:!

dyreriket | {}动物界
leddormer @ {}环节动物
¤igler$ {}环带纲

符号|,@,¤, $和更多应该用换行符和给定数量的缩进代替。我可以使缩进工作,但不是换行符。使用`n时没有响应,它只删除原始字符。到目前为止,我一直在玩这个代码。

$t1 = '\@'; 
$r1 = "`n`t`t"; 
$t2='\¤'; 
$r2="`n"; 

Get-Content C:\arter\test.txt ` 
    | ForEach-Object { $_ -creplace $t1, $r1; } ` 
    |ForEach-Object { $_ -creplace $t2, $r2; } ` 
    | Out-File C:\arter\test2.txt ; 

回答

1

你可以做一个行由行文本替换这样的:

$searchText = '[|[email protected]☼$]'; 
$replacementText = "`r`n`t`t"; 

Get-Content -Path Input.txt ` 
    | ForEach-Object { $_ -creplace $searchText, $replacementText; } ` 
    | Out-File -FilePath Output.txt; 

使用regular expression character classes更换|!@,或$字符出现的所有Input.txt用换行符后跟一个回车符,后跟两个制表符,并将结果文本写入Output.txt。要执行不区分大小写的搜索,请使用-replace-ireplace运算符。

+0

感谢您的回应,但我得到了一些不一致的结果,这可能是由于保留字符或其他原因造成的。试图替换|时它会在文档中的每个字符之间添加't'。它忽略了'n。 – 2012-07-17 15:07:50

+0

'-replace'运算符的替换文本参数是[.NET正则表达式](http://msdn.microsoft.com/library/az24scfc.aspx)。 Pipe是正则表达式中的一个特殊字符,因此您需要将其作为''\ |''转义。请注意,您正在为.NET正则表达式引擎而不是PowerShell进行转义,这就是您使用反斜杠而不是反向引用的原因。 – BACON 2012-07-17 15:08:45

+0

啊。这解释了一些,但换行符仍然不起作用:S这里是我输入它的代码。 $ replacementText =“'n't't”; Get-Content C:\ arter \ final1.txt' | ForEach-Object {$ _ -creplace $ searchText,$ replacementText; }' | Out-File C:\ arter \ final2.txt; ' – 2012-07-17 15:17:51