2011-07-10 4 views
2

ファイル名が.txtで終わる大きなテキストファイルを持っています ファイルの行のいくつかは、ファイル名の拡張子の後に不要なテキストを含みます。 私は検索する方法を見つけようとしています+ファイル全体を置換またはトリムするので、行が.txtで見つかった場合は、それ以降のものは単に削除されます。例テキスト操作上の問題 - 既知の値の後にテキストを置き換える方法

C:\ test1.txtという

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

:\ Test2.txtHelloWorldが、これは私の 問題

Cであります

希望結果

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の後に何も(ワイルドカード*)を交換した場合であるが、このdoesntの仕事。私は正規表現を使用する必要があると思う、購入構文が間違っている。

答えて

5

単純にそうように、.**を変更:*は「0回以上」を意味し、この場合には、それは.txtの最終tに作用するだろうと、正規表現で

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

、そう.txt*のみ.tx.txt.txtt.txttt、などと一致します...

.は、しかし、任意の文字に一致します。つまり、.*は0以上のものと一致します。これはあなたが望むものです。このため、alovelytxtfile.txtのようにファイル名が破損する可能性があるので、..txtにエスケープしました。これはalovel.txtにトリムされます。

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

+0

私は気づかないだろう、歓声! – AndyR

+1

あなたの例が間違っていることを指摘しましょう。正規表現の先頭に '.'をエスケープしなかった場合、返されるサンプルファイル名は' alovely.txt'ではなく 'alovel.txt'になります。そうでなければきれいな答えへの質問。 ;-) – Mark

+0

@マーク:あなたは絶対に正しいです。今それを修正しました。ありがとう! :) –

関連する問題