2

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

C:\Test1.txt

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

C:\ Test3.txt_ _ __ _烦人的东西1234 .r

期望的结果

C:\Test1.txt

C:\Test2.txt

C:\Test3.txt

我曾尝试使用记事本++,或使用批处理/powershell,但接近了,没有雪茄。

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

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

4

1 回答 1

5

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

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

在正则表达式中,*表示“0 次或多次”,在这种情况下,它将作用于 的最后t一个.txt,因此.txt*只会匹配.tx, .txt, .txtt,.txttt等...

.但是,匹配任何字符。这意味着,.*匹配 0 或更多的任何东西,这是你想要的。正因为如此,我也转义了.in .txt,否则它可能会破坏像这样的文件名:alovelytxtfile.txt,这将被修剪为alovel.txt.

有关更多信息,请参阅:

于 2011-07-10T14:46:48.907 回答