Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell:如何从文本文件中不符合条件的行中删除CRLF_Powershell - Fatal编程技术网

Powershell:如何从文本文件中不符合条件的行中删除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

这似乎很简单,但无法得到任何我试图工作。我试图从不符合条件的行的末尾删除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 
{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
分块处理)是可行的,但有点复杂。

该输出会用大量不需要的字符填充文件。“似乎不起作用。”杰克布莱克为我发布了一个过于复杂、甚至无法快速工作的解决方案而感到羞愧。我已经用一个简单得多的,似乎对我有用的方法来代替它。确实如此!非常感谢你@杰克布莱克,请点击✔️ 在答案的左侧,将此答案标记为已接受并可选择向上投票。这是表达“谢谢”的方式。你甚至会因为接受而获得两个声望点。完成!新的,再次感谢!该输出用大量不需要的字符填充文件。“似乎不起作用。”杰克布莱克为我发布了一个过于复杂、甚至无法快速工作的解决方案而感到羞愧。我已经用一个简单得多的,似乎对我有用的方法来代替它。确实如此!非常感谢你@杰克布莱克,请点击✔️ 在答案的左侧,将此答案标记为已接受并可选择向上投票。这是表达“谢谢”的方式。你甚至会因为接受而获得两个声望点。完成!新的,再次感谢!