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

0qx6xfy6  于 2023-01-30  发布在  Shell
关注(0)|答案(2)|浏览(249)

在我的文本文件中有一些字符串,我想使用powershell排除。我的文本文件的示例如下所示
“定义QLOCAL * 更改日期(2015年2月19日)* 备降场(2013年10月38日)* 报告日期(2015年2月19日)* 实时时钟(2013年10月38日)远端(否)最大深度(999999999)最大值(32762)更换定义Q模型('系统.JMS.温度.模型')* 替代日期(2015年2月19日)* 高度时间(2015年10月38日)* 校准日期(2015年2月19日)* 校准时间(2015年10月38日)缺陷类型(天普迪恩)距离(编号)最大深度(5000)最大信息(104857600)* 高度日期(2015年2月19日)"。
我想从文件中删除的字符串都以星号开头(*)类似于 CRDATE(12-45-1245) 实时时钟(12.12.12)...问题是我将如何使用powershell从文件中删除,以及我必须使用什么类型的命令?我已经在linux上使用流编辑器完成了此操作(SED)。例如sed -e 's/.CURDEPTH.[0-9]*)//' -e 's/.IPPROCS.[0-9]*)//'但是我不知道windows powershell的等价物。任何建议都可以帮助。谢谢

7fhtutme

7fhtutme1#

您遇到的问题可能会遇到多个障碍,因为您将需要执行RegEx替换,这看起来像是您以前在Linux中执行过的操作,无论您是否意识到,并且您将需要将文件完整地读入PowerShell,因为您的字符串看起来可能跨越多行。
我不打算在这里教你如何使用RegEx,关于它的工作细节,请看www.regular-expressions.info。我将帮助你找到你要找的东西,并帮助你阅读文件,这样你就可以删除所有匹配项。
让我们从阅读文件开始。Get-Content cmdlet将读取文件,但默认情况下,它将文件分解为字符串数组,每个字符串占一行。您需要做的是使用-Raw参数,以便它将整个文件读取为一个字符串。类似于:

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

然后你可以用圆括号把它括起来,这样它就完成了这个命令,并在它上面执行一个-Replace,这将执行一个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"
fnvucqvd

fnvucqvd2#

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

相关问题