在我的文本文件中有一些我想用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的等价物。
任何建议都有帮助。
感谢
答案 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