使用PowerShell从文件中删除多个字符串

时间:2015-03-02 19:44:38

标签: powershell

在我的文本文件中有一些我想用powershell排除的字符串。 我的文本文件样本如下所示

  

“DEFINE QLOCAL * ALTDATE(2015-02-19)* ALTTIME(10.38.13)* CRDATE(2015-02-19)* CRTIME(10.38.13)DISTL(NO)MAXDEPTH(999999999)MAXMSGL(32762)更换定义QMODEL('SYSTEM.JMS.TEMPQ.MODEL')* ALTDATE(2015-02-19)* ALTTIME(10.38.14)* CRDATE(2015-02-19)* CRTIME(10.38.14)DEFTYPE(TEMPDYN) DISTL(NO)MAXDEPTH(5000)MAXMSGL(104857600)* ALTDATE(2015-02-19)“。

我要从文件中删除的字符串都以星号(*)开头,如* CRDATE(12-45-1245)* CRTIME(12.12.12)... 问题是我将如何使用powershell从文件中删除以及我必须使用哪种命令? 我使用流编辑器(SED)在linux上完成了这个。例如sed -e 's/.CURDEPTH.[0-9]*)//' -e 's/.IPPROCS.[0-9]*)//'  但我不知道windows powershell的等价物。 任何建议都有帮助。 感谢

2 个答案:

答案 0 :(得分:2)

欢迎来到StackOverflow!虽然我们不是代码编写服务,但我们确实希望人们提供他们正在使用的代码,以便我们可以帮助解决错误,并帮助他们修复自己的代码......我觉得对你而言。您遇到的问题可能会遇到多个障碍因为您想要进行RegEx替换,看起来您可能已经在Linux之前完成了这个问题,而且您已经意识到这一点,而且我希望将文件全部读入PowerShell,因为你的字符串看起来可能跨越多行。

我不会在这里教你RegEx,有关其工作原理的详细信息,请查看www.regular-expressions.info。我将帮助您提供一个RegEx,它可以找到您正在寻找的内容,并帮助您阅读文件,以便您可以删除所有匹配项。

让我们开始阅读您的文件。 Get-Content cmdlet将读取该文件,但默认情况下会将其分解为一个字符串数组,每个字符串为一行。您要做的是使用-Raw参数,以便将整个文件读入一个字符串。像这样:

Get-Content "C:\Path\To\File.txt" -Raw

然后,您可以将其括在括号中,以便它完成该命令,并在其上执行-Replace,它将执行RegEx搜索和替换功能。 RegEx搜索:

"\*\S*"

应该适合你。这会查找任何星号和尽可能多的非空格字符,直到下一个空格。您可以在以下位置查看其工作原理:

https://regex101.com/r/bE9lP7/1

然后将其传递给Set-Content cmdlet,您应该进行设置。因此代码应如下所示:

(Get-Content "C:\Path\To\File.txt" -Raw) -Replace "\*\S*" | Set-Content "C:\Path\To\NewFile.txt"

答案 1 :(得分:0)

cls
$str = "DEFINE QLOCAL *ALTDATE(2015-02-19) *ALTTIME(10.38.13) *CRDATE(2015-02-19) *CRTIME(10.38.13) DISTL(NO) MAXDEPTH(999999999) MAXMSGL(32762) REPLACE DEFINE QMODEL('SYSTEM.JMS.TEMPQ.MODEL') *ALTDATE(2015-02-19) *ALTTIME(10.38.14) *CRDATE(2015-02-19) *CRTIME(10.38.14) DEFTYPE(TEMPDYN) DISTL(NO) MAXDEPTH(5000) MAXMSGL(104857600) *ALTDATE(2015-02-19)"
$str = [regex]::replace($str, '\*.*?\(.*?\)\s', '')
$str