我有一个大的文本文件,其中包含以.txt结尾的文件名文件的某些行在文件扩展名之后有不需要的文本。我正试图找到一种方法来搜索+替换或修剪整个文件,以便如果一行被发现与。txt,这之后的任何东西都被简单地删除。示例
C: Test1.txt
C: Test2。这是我的问题
C: Test3.txt_ _ __ _Annoyingstuff1234 r
想要的结果
C: Test1.txt
C: Test2.txt
C: Test3.txt
我试过用notepad++,或者使用批处理/powershell,但是很接近,没有雪茄。
(Get-Content "D:checkthese.txt") |
Foreach-Object {$_ -replace '.txt*', ".txt"} |
Set-Content "D:CLEAN.txt"
我的想法是,如果我在。txt之后替换任何东西(通配符*),那么我会修剪掉我需要的东西,但这不起作用。我想我需要使用正则表达式,但我有语法错误。
只需将*
更改为.*
,如下所示:
(Get-Content "D:checkthese.txt") |
Foreach-Object {$_ -replace '.txt.*', ".txt"} |
Set-Content "D:CLEAN.txt"
在正则表达式中,*
表示"0次或多次",在这种情况下,它将作用于.txt
的最后t
,因此.txt*
只匹配.tx
, .txt
, .txtt
, .txttt
等…
.
匹配任何字符。这意味着,.*
匹配0或更多的任何东西,这就是您想要的。因此,我也在.txt
中转义了.
,因为它可能会在像:alovelytxtfile.txt
这样的文件名上中断,它将被修剪为alovel.txt
。
有关更多信息,请参见:
- Regex教程-
.
- 正则表达式教程-
*