2015-03-02 47 views
-1

在我的文本文件中有一些字符串,我想使用powershell排除。 樣品我的文本文件看起來像這樣使用powershell從文件中刪除多個字符串

「DEFINE QLOCAL * ALTDATE(2015年2月19日)* ALTTIME(10.38.13)*的crdate(2015年2月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)「。

,我想從文件中刪除所有的字符串開始用星號(*),如*的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
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 
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搜索:

"\*\S*" 

應該爲你工作。這會查找任何星號和儘可能多的非空白字符,直到下一個空格爲止。你可以看到它是如何工作的:

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

然後就管,爲一個Set-Content命令,你應該設置。所以代碼應該如下所示:

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

感謝TheMadTech的快速響應。添加更多的要點只是爲了說清楚。第一..ReGex「* \ S *」正在工作完美!我現在面臨的問題是我的文件頂部有8行,您可能會認爲它是頭文件,我不希望ReGex「* \ S *」通過它。但是如何? )2nd ..在以asterics開頭的任何字符串被刪除後,它將留下一個空格/製表符。我要如何限制carachters之間的空間到singel空間或標籤? – Abdulkadir 2015-03-03 01:15:45

+0

通過在字符串末尾添加空格來避免雙倍空間將''\ * \ S「'更改爲'」\ * \ S「'。至於保持前8條線路,可能會變得更加複雜。你知道你想要替換的任何字符串是否跨越換行符? – TheMadTechnician 2015-03-03 02:48:09

+0

每當我從Powershell終端運行此命令它工作正常,我得到輸出的方式我想,但是當我將此命令保存到批處理文件(因爲我想添加到Windows任務調度)我得到「 - 更換「...任何幫助,請... (Get-Content」C:\ TO \ INPUTFILE.txt「) - 替換」\ * ALTTIME \ S * | \ * ALTDATE \ S * | \ * CRTIME \ S * | \ * CRDATE \ S * | \ * IPPROCS \ S * | \ * OPPROCS \ S *「| Set-Content「C:\ TO \ OUTPUTFILE.txt」 – Abdulkadir 2015-03-03 17:55:10

相關問題