私はテキストファイルを持っていて、<Path>
で始まっている行を維持して、他のすべての行を削除したいです。
どうすればいいの?
これを達成する簡単な方法があります。あなたは3つのステップを実行する必要があります。
検索メニュー>検索...> "マーク"タブを選択してください。正規表現を有効にします。 ^<Path>
を検索します(^
は行の先頭です)。 "Bookmark lines"をチェックして "Mark All"を押すことを忘れないでください
==>あなたが残しておきたいすべての行にブックマークが付きます
メニューに移動 "検索 - ブックマーク - 逆ブックマーク"
==>あなたが削除したいすべての行がブックマークされています。
メニューの "検索 - ブックマーク - ブックマークした行の削除"をクリックしてください。
==>ブックマークされた行はすべて削除されます。
これは6.3の時点で実際には2つのステップで行うことができます。最初に試したときは5.9だったので、それよりも早くできると思います。
この答えの根拠としてstemaの投稿を使う。もう1つ少ないステップがあります。行をマークし、マークの付いていない行を削除します。完了しました。詳細な指示は続きます。
検索メニュー "検索"。検索ダイアログで、「マーク」タブをクリックします。正規表現を有効にします。 ^<Path>
を検索します(^
は行の先頭です)。 "Bookmark lines"をチェックして "Mark All"を押すことを忘れないでください
==>あなたが保持したいすべての行にブックマークが付きます
検索メニュー - >ブックマーク - >マークのない行を削除.
==>すべて非ブックマークした行は削除されます。
正規表現の置き換え
(?!^.*test.*$)^.+
テストを要求されたテキストに置き換えます
取り替える
[\r\n]{2,}
\r\n
と一緒に
一致を空の文字列で置き換えるには^(?!<Path>).*\r\n
を使用してください。一般化されたバージョンは^(?!.*?test).*\r\n
です。 これはファイルの最後の空行を削除しません。複数の連続した空行を含む、他のすべての行は削除されます
(?!)
はネガティブルックアップです。 ^.*test.*$
は、要求されたテキストを含む行全体を選択します。
[\r\n]{2,}
は、これがWindows New lineになると、複数回出現するすべての\r\n
に一致します。あなたがLinuxか他のオペレーティングシステムを持っているなら、あなたはこれを台無しにする必要があるかもしれません。もう1つは、1行に置き換えます。
最も簡単な方法は、「現在の文書ですべて検索」機能を使用してから、結果を新しいファイルにコピーするか、すべてを選択して現在のファイルに置き換えることです。
これはあなたのテキストを含むすべての行を見つけて、それらを一番下にリストするでしょう。検索結果を右クリックしてコピー&ペーストするだけです。
メニューに移動検索 - >検索... - >通常のライセンス認証式"^Path"を検索します(^は行頭を表します)。
「現在の文書ですべて検索」ボタンをクリックしてください。
[検索結果]ウィンドウに、パターンのすべての行が表示されます。それらをNotepad ++の新しいタブにコピー/ペーストします。
メニュー検索 - >置換... - ) - >正規表現を有効にします。
[検索する文字列]フィールドで、 "Line\d +:"というパターンを使用します。 [置換後の文字列]フィールドは空白のままにします。
「全置換」ボタンをクリックしてください。
ファイルシステムパスではなく<Path>
に実際に一致させたい場合は、Perlを使用してコマンドラインからこれを試すことができます。
Perl -pe " if ($_ !~ /<Path>/) { s/$_// } " < in.txt > out.txt
Windows上のStrawberry Perlと連携していますので、期待した結果にならない場合は適宜調整してください。
それは不器用ですが、それをすべて Excel にコピーしてから、=IF(LEFT(A1,6)="<Path>",A1,"")
を使用してその式をすべてコピーします。それをコピーしてNotepad ++に戻します。理想的ではありませんが、非常に簡単です(Excelを使用している場合)。警告:インデントされた行ではうまく機能しません(Excelでは列などが移動します)。
Notepad ++を使ってあなたが望むことをする簡単な方法はありません。あなたはあなたのコンピュータにプログラムをダウンロードするか、VBに何かスクリプトを書く必要があるでしょう(私はあなたがWindows上にいると仮定します)。
2つの方法のうちの1つをsedで実行できます。 sedユーティリティは* nix上でお気に入りであり、GnuWin( http://gnuwin32.sourceforge.net/packages/sed.htm )。このプログラムをダウンロードしてから、コマンドプロンプトからコマンドを実行します。
含まれていないすべての行を削除します。sed -i '/^<PATH>/!d' file
を含むすべての行を新しいファイルに出力します。sed -n '/^<PATH>/p' file > newfile
私はあなたがあなたが新しいファイルに望む行を印刷することを使うことを勧めます。これは、おそらく正規表現を最初に受け取らないためです。 sedユーティリティは正規表現基本構文を使用します( http://www.regular-expressions.info/reference.html で参照を表示します)。これが* nixパス(/ var/www)のようなものであれば、正規表現が機能するために/文字をエスケープする必要があります。
例:sed -n '/^\/var\/www/p' file > newfile
これは '/ var/www'で始まるすべての行を印刷します。 /文字をエスケープすると、コマンドはエラーをスローします。特殊文字(/など)は円記号\でエスケープできます。
正規表現によるより良い解決法
(?!^.*SOMETEXT.*$)^.+\r?\n
そして何も取り替えない
Search-> Replaceを使って^[^ ].*
のような正規表現を入力し、Regular expression
を使ってallを空の文字列に置き換えます。次のステップは、空の行を見つけて\n\n
までの間にExtended
を複数回使用して\n
に置き換えて0 occurrences were found.
を検索することです(ファイル形式に応じて\r\n\r\n
および\r\n
を使用します)。 1行に非常に多くの空行がある場合は、検索文字列に\n\n\n\n\n\n\n
またはさらに多くの\n
:sを使用する方が簡単です。