- 締切済み
特定文字列を含まない行を削除
以前特定文字列を含む行を削除する方法の質問をし、正規表現を置換することでできることを知りました。^.*特定の文字列.*\n 今度は特定文字列を含まない行を削除を削除したいです。 この場合どう記述すればいいでしょうか? また、特定文字列1と特定文字列2のどちらかを含まない行を削除する方法もあわせて知りたいです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10359)
回答No.2
「特定の文字」ではなく、「特定の文字列」ということなので、#1の方のお書きの方法は使えません。正規表現では「特定の文字列を含まない」という表現は出来ません。 正規表現を使うツール側で対処することになります。 例えば、abcde を含まない行を削除するとして、viエディタだと、 :v/abcde/d sed だと、 sed -n /abcde/p perlだと、 perl -ne 'print $_ if /abcde/' >特定文字列1と特定文字列2のどちらかを含まない行を削除 両方共を含む場合のみ残すということでしょうか? abcde.*xyz|xyz.*abcde という感じですね。ツールによっては、abcde.*xyz\|xyz.*abcde です。
- galoon
- ベストアンサー率28% (38/133)
回答No.1
つぎの方法ではいかがでしょうか。 例) a という文字を含まない行のデータ ^[^a]*$ 例) a b を含まない行のデータ ^[^a|b]*$ [ ]の中、先頭の ^ が否定を示し、 | が「または」という条件列挙を示します。 正規表現は解析するエンジンごとに若干の違いが現れますので上記のものが使えるかは不明ですが当方の環境か利用する正規表現解析エンジンでは期待通りの動作を確認しています。