2

.txtで終わるファイル名を含む大きなテキストファイルがあります。ファイルの一部の行には、ファイル名拡張子の後に不要なテキストが含まれています。ファイル全体を検索+置換またはトリミングして、.txtで行が見つかった場合に、これ以降のすべてが単純に削除されるようにする方法を見つけようとしています。例

C:\ Test1.txt

C:\Test2.txtHelloWorldこれは私の問題です

C:\ Test3.txt_ ____迷惑なもの1234.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の後に何か(Wildcard *)を置き換えると、必要なものを削除することですが、これは機能しません。正規表現を使用する必要があると思います。購入の構文が間違っています。

4

1 に答える 1

5

次のように、*をに変更するだけです。.*

(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もエスケープしました。これは、にトリミングされます。.txtalovelytxtfile.txtalovel.txt

詳細については、以下を参照してください。

于 2011-07-10T14:46:48.907 に答える