Powershell:如何从文本文件中不符合条件的行中删除CRLF
这似乎很简单,但无法得到任何我试图工作。我试图从不符合条件的行的末尾删除CRLF,然后将文件输出到新文件。例如,本节:Powershell:如何从文本文件中不符合条件的行中删除CRLF,powershell,Powershell,这似乎很简单,但无法得到任何我试图工作。我试图从不符合条件的行的末尾删除CRLF,然后将文件输出到新文件。例如,本节: One~Two~Three~Four Test Plan Pay Work~scheduled payment pending~79f1cf6e~3/8/2020 6:13:07 PM Test Plan Pay Work~Bad Request~680a0bb2~3/8/2020 6:14:00 AM Test Plan Pay Work~GetCardInfo {fail
One~Two~Three~Four
Test Plan Pay Work~scheduled payment pending~79f1cf6e~3/8/2020 6:13:07 PM
Test Plan Pay Work~Bad Request~680a0bb2~3/8/2020 6:14:00 AM
Test Plan Pay Work~GetCardInfo
{failed to validate card
}
~f124a822-aa8d-4624-bb8c-ddsfgdfcc21fb~3/8/2020 6:14:31 PM
Test Plan Pay Work~Bad Request~680a0bb2~3/8/2020 6:14:00 AM
输出应该是这样的:
One~Two~Three~Four
Test Plan Pay Work~scheduled payment pending~79f1cf6e~3/8/2020 6:13:07 PM
Test Plan Pay Work~Bad Request~680a0bb2~3/8/2020 6:14:00 AM
Test Plan Pay Work~GetCardInfo {failed to validate card}~f124a822~3/8/2020 6:14:31 PM
Test Plan Pay Work~Bad Request~680a0bb2~3/8/2020 6:14:00 AM
作为一名新手,我尝试过:
Get-Content "C:\temp\errors.csv" | ForEach-Object {
if ((!$_.EndsWith("AM") -and !$_.EndsWith("PM") -and !$_.EndsWith("Four")))
{
$_ -replace ("`r`n",' ')
}
} | Out-File C:\temp\errors2.csv
但这是行不通的。有什么想法吗?看起来很简单,但无论我怎么做都无法让它工作。
获取内容
将文本拆分为单独的行,并默认删除换行符。要防止出现这种情况,请使用参数-Raw
。现在,您可以使用正则表达式运算符将文本作为一个整体进行处理:
(Get-Content 'errors.csv' -Raw) -replace '(?<!AM|PM|Four)\r\n', ' ' |
Out-File 'errors2.csv'
正则表达式分解:
(?启动一个反向查找断言
文字AM | PM | Four
、AM
或PM
Four
结束否定查找断言)
换行字符\r\n
AM
、PM
或Four
时,负查找断言才会使正则表达式匹配。反向查找不包含匹配结果的一部分,因此只替换换行字符
注意:
这种方法使用
Get Content-Raw
将整个文件加载到内存中。如果文件太大,使用默认的Get Content
,逐行处理输入(可能使用参数-ReadCount
分块处理)是可行的,但要复杂一点。Get Content
将文本拆分为单独的行,并默认删除换行符。要防止出现这种情况,请使用参数-Raw
。现在,您可以使用正则表达式运算符将文本作为一个整体进行处理:
(Get-Content 'errors.csv' -Raw) -replace '(?<!AM|PM|Four)\r\n', ' ' |
Out-File 'errors2.csv'
正则表达式分解:
(?启动一个反向查找断言
文字AM | PM | Four
、AM
或PM
Four
结束否定查找断言)
换行字符\r\n
AM
、PM
或Four
时,负查找断言才会使正则表达式匹配。反向查找不包含匹配结果的一部分,因此只替换换行字符
注意:
这种方法使用
Get Content-Raw
将整个文件加载到内存中。如果文件太大,则使用默认的获取内容
,逐行处理输入(可能使用参数-ReadCount
分块处理)是可行的,但有点复杂。该输出会用大量不需要的字符填充文件。“似乎不起作用。”杰克布莱克为我发布了一个过于复杂、甚至无法快速工作的解决方案而感到羞愧。我已经用一个简单得多的,似乎对我有用的方法来代替它。确实如此!非常感谢你@杰克布莱克,请点击✔️ 在答案的左侧,将此答案标记为已接受并可选择向上投票。这是表达“谢谢”的方式。你甚至会因为接受而获得两个声望点。完成!新的,再次感谢!该输出用大量不需要的字符填充文件。“似乎不起作用。”杰克布莱克为我发布了一个过于复杂、甚至无法快速工作的解决方案而感到羞愧。我已经用一个简单得多的,似乎对我有用的方法来代替它。确实如此!非常感谢你@杰克布莱克,请点击✔️ 在答案的左侧,将此答案标记为已接受并可选择向上投票。这是表达“谢谢”的方式。你甚至会因为接受而获得两个声望点。完成!新的,再次感谢!