2010-11-18 34 views
40

テキストファイルに大きな変更を加えるときは、定期的に(query-replace-regexp "from" "to")という表現を使用します。Emacsは、一致しないすべての行を削除しますか?

がない場合は、と一致するすべての行を削除する正規表現が必要です。たとえば、RPMを構築するためのRedHat SPECファイルでは、をで始まる行にちょうどのままにしておきたい(一致しない行をすべて削除する)。 grep -E '^Patch'で十分に簡単ですが、Emacsには方法がありますか?

私が試した:無駄に

(query-replace-regexp "^\\(?!Patch\\)[^\r\n]*$" "") 

を(負の先読みがサポートされていない表示されます)。

アイデア?

答えて

76

代わりにパッチ ^ラインを保つM-X をお試しください:

(keep-lines REGEXP &optional RSTART REND INTERACTIVE)

はREGEXPの一致を含むものを除くすべての行を削除します。正規表現に一致する行が削除さ

反対のコマンドもあり、M-Xフラッシュライン、。

+0

これはうまくいきました、ありがとう! –

4

それはあなたが探しているだけの「パッチ」なら、あなたは私が認める

^([^P]|P[^a]|Pa[^t]|Pat[^c]|Patc[^h])[^\r\n]*$ 

を使用して^Patchに一致しない行を識別することができますが、それはしかし、かなり醜いです。 =)

+0

は母...それを愛します! –

17

使用M-x delete-non-matching-linesM-x delete-matching-lines

+0

これはうまくいきました、ありがとう! –

+8

'delete-non-matching-lines'のドキュメントは' keep-lines'のエイリアスで、 'delete-matching-lines'は' flush-lines'のエイリアスです。 –

関連する問題