文本操作问题 - 如何在已知值之后替换文本

And*_*dyR 2 regex powershell text file-manipulation

我有一个包含以.txt结尾的文件名的大型文本文件.文件扩展名后,文件的某些行包含不需要的文本.我试图找到一种方法来搜索+替换或修剪整个文件,以便如果找到一行.txt,之后的任何内容都会被删除.例

C:\个Test1.txt

C:\ Test2.txtHelloWorld这是我的问题

C:\ Test3.txt_ _ __ _Annoying stuff1234 .r

期望的结果

C:\个Test1.txt

C:\的test2.txt

C:\ Test3.txt

我尝试过使用notepad ++,或使用batch/powershell,但是接近了,没有雪茄.

(Get-Content "D:\checkthese.txt") | 
Foreach-Object {$_ -replace '.txt*', ".txt"} | 
Set-Content "D:\CLEAN.txt"
Run Code Online (Sandbox Code Playgroud)

我的想法是,如果我在.txt之后替换任何东西(Wildcard*),那么我会剪掉我需要的东西,但这不起作用.我想我需要使用正则表达式,购买语法错误.

Seb*_*olm 5

只需将其更改*为a .*,如下所示:

(Get-Content "D:\checkthese.txt") | 
Foreach-Object {$_ -replace '\.txt.*', ".txt"} | 
Set-Content "D:\CLEAN.txt"
Run Code Online (Sandbox Code Playgroud)

在正则表达式,*意为"0次以上",而在这种情况下,它会作用于最终t.txt,所以.txt*将只匹配.tx,.txt,.txtt,.txttt,等...

.但是,匹配任何角色.这意味着,.*匹配任何东西的0或更多,这是你想要的.正因为如此,我也躲过了..txt,因为它可以否则像文件名突破:alovelytxtfile.txt,这可能会被缩减到alovel.txt.

有关更多信息,请参阅: