【问题标题】:Replace character with indent and line break in powershell在powershell中用缩进和换行符替换字符
【发布时间】:2012-07-16 10:20:23
【问题描述】:

有没有办法在文本文件上使用 foreach 和 replace 来更改带有换行符和 x 缩进数的字符?特殊要求,但它是让它在另一个程序中可读。

示例文本:

dyreriket|{动物}
!leddormer@{Annelida}
¤igler${Clitellata}

符号 |、!、@、¤、$ 和更多符号应替换为换行符和给定数量的缩进。我可以使缩进起作用,但不能使换行符起作用。使用`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 ;  

【问题讨论】:

    标签: powershell replace foreach indentation line-breaks


    【解决方案1】:

    您可以像这样进行逐行文本替换:

    $searchText = '[|!@☼$]';
    $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 运算符。

    【讨论】:

    • 感谢您的回复,但我得到一些不一致的结果,可能是由于保留字符或其他原因。当试图更换 |它在文档中的每个字符之间添加了 't。它忽略了'n。
    • -replace 运算符的替换文本参数是.NET regular expression。管道是正则表达式中的特殊字符,因此您需要将其转义为'\|'。请注意,您正在为 .NET 正则表达式引擎而不是 PowerShell 转义它,这就是您使用反斜杠而不是反引号的原因。
    • 啊。这解释了其中一些,但换行符仍然不起作用:S 这是我输入的代码。$searchText = '\|'; $replacementText = "ntt"; Get-Content C:\arter\final1.txt ` | ForEach-Object { $_ -creplace $searchText, $replacementText; } ` | Out-File C:\arter\final2.txt ; `
    • 您能否编辑您的问题以包含您正在使用的代码以及您正在执行搜索和替换的一些示例文本?我认为评论框误解了你的一些反引号。
    • 试试$replacementText = "`r`n`t`t";。我忘记了`n 只是一个 LF 而不是 CR-LF,并且由于我使用的是 Notepad++,它仍然呈现了看起来正确的输出。直到我启用空白字符的显示,我才注意到缺少回车。
    猜你喜欢
    • 2013-02-23
    • 2018-12-27
    • 2010-09-06
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多