
コマンドラインを使用して、notepad++ で行う複雑な検索と置換を実行したいと考えています。Web で多くのソリューションを見つけましたが、どれも私の要件に合いません。
正規表現による検索と置換を実行したいファイルが1つあります
正規表現文字列を含む別のファイル (検索と置換の両方)。これを使用して、2 つの別々のファイルなどを作成できます。
上記のタスクを実行できる場合は、このファイルに正規表現の検索および置換文字列を配置する方法についても説明してください。
編集
Windows 用の PCRE 互換の検索および置換ユーティリティはありますか?
答え1
Windows には「findstr」コマンドがありますが、置換はできず、正規表現のサポートも限られています。それを超えるには、*nix でそれを実行する方法を調べてから、Windows でそれらのツールを使用します。そうすれば、Windows 用の grep と sed を入手できます。
バッチ処理をする人の中には、Microsoft Jscript とバッチ処理を統合し、検索と置換のオプションを備えたツール (おそらくバッチ処理のエキスパートである Dave Benham が作成したもの) を使用する人もいます。これは、非常にロックダウンされたシステムを使用していて、EXE をダウンロードすることさえできない場合には最適だと思います。しかし、それ以外の場合、スクリプトをダウンロードしたりコピー/貼り付けしたりすることは、サードパーティのものを入手するのとほとんど同じです。また、grep や sed などの広く使用されているツールが既に存在し、Windows 用にダウンロードできます。
これは*?
遅延評価であり、少し高度で、-P(PCRE - Perl互換の正規表現)が必要です。
C:\>echo abccccdd| grep -oP "a.*?c"
abc
C:\>
正規表現がそれほど高度でない場合は、必要に応じて -P を削除できます。ただし、私はそのままにしておきます。
Sed は PCRE ほどではありませんが、これらのコマンド ライン ユーティリティの次善策と思われる ERE (拡張正規表現) をサポートしています。-r 付きで sed を使用すると、余分なバックスラッシュを使用する必要がなくなります。最後に確認したところ、-r なしでは BRE (基本正規表現) が使用されます。
これは正規表現の一致を何もないものに置き換えることを意味します
C:\>echo abccccdd| sed -r "s/c{2,3}//"
abcdd
この/g修飾子は、グローバルな検索と置換を行うので、最初の一致だけを置換するわけではありません。
C:\>echo abacacda| sed "s/a//g"
bccd
gnuwin32 で取得するか、cygwin から使用することもできますが、その場合は一重引用符を使用し、cygwin を使用する場合は、cygwin のシェル (例: cygwin の bash シェル) から実行することをお勧めします。
これらのコマンドは明らかにファイルに対して操作できます。
C:\>type a.a
asdf
C:\>
C:\>grep -o a a.a
a
C:\>sed "s/a/z/" a.a
zsdf
C:\>
またはPerl
grep では検索と置換はできません。sed ではできますが、sed は PCRE をサポートしていません (少なくとも私が持っている sed は)。別の選択肢は perl です。Perl の正規表現は PCRE と同等かそれ以上です。こちらをご覧ください。https://stackoverflow.com/questions/4794145/perl-one-liner-like-grepそしてこのリンクについて言及しているのを見てくださいターミナルで正規表現とマッチングするための Perl ですか?私の回答を見てください。Perl形式のgrepとsedがあり、Perlで優れた正規表現サポートが得られることは明らかです。
2 番目のリンクで私の回答を見ると (前述したように)、cygwin で perl を入手して使用したということ、およびその使用方法について述べていることがわかります。