windows – コマンドラインからのレジェックスの置換

command-line find-and-replace regex windows

コマンドラインからの正規表現置換は可能でしょうか?今のところ、私はこれを行うためにnotepad++を使用しています。コマンドラインではFINDSTRしか使えないのですが、これはファイルや行の位置を特定することしかできません。 EDIT : VBスクリプトを作ってコマンドラインから実行できるようになるのではないでしょうか? 私は「hi.vbs」というファイルを作成しました

Msgbox "Hi Buddy"

そして、コマンドラインから “hi “と入力することで、cmdで直接実行できるようになりました。 だから、もしバッチスクリプトでは無理なら、バッチ経由のVBスクリプトを使うかもしれない。それとも…?

  24  Aziz  2011-09-23


ベストアンサー

http://gnuwin32.sourceforge.net/packages.html SEDまで下にスクロールしてください。今のうちに coreutils もダウンロードしておきましょう

このコマンドは、グローバルに、そして各行で a を b に置き換えます

例えば、sed “s/a/b/g” a.txtを使用しています

C:\>type a.txt
aaaa
aaa

C:\>sed "s/a/b/" a.txt
baaa
baa

C:\>sed "s/a/b/g" a.txt
bbbb
bbb

C:\>

VBScriptは正規表現をサポートしています

dim re, s
set re = new RegExp

re.Pattern="in"
re.Global=True 'false is default
s="bin din in"
MsgBox re.Replace(s,"xxx")

bxxx dxxx xxx を表示します

12  barlop  2011-10-04


これを行うためのWindows用のフリーのコマンドラインツールを書きました。これは rxrepl と呼ばれるもので、Unicode とファイル検索をサポートしています。便利なツールだと思う人もいるかもしれません

rxreplは、Perl互換の正規表現(PCRE)を使用してテキストファイル内のテキストを検索・置換するMicrosoft Windowsのコマンドラインツールです

以下のような特徴があります

  • Perl互換正規表現を使って検索します
  • 置換テキストでグループマッチングを使用します
  • Windows と Unix の行末をサポートします
  • Unicode support
  • 複数の検索/置換引数を受け付けます
  • オプションは、オプションファイルで提供されることがあります
  • ファイルをスキャン
  • Preview mode
  • ラインとフルファイルのマッチングモード

enter image description here

27  user2005187  2013-01-23


The Scripting Guy は、PowerShell でこれを行う方法をカバーしています (最近の Windows OS では追加ダウンロードは必要ありません。おそらくすでにインストールされているでしょう)

起動して、以下を実行します(*@に置き換える)

(Get-Content C:\Scripts\Test.txt) |
Foreach-Object {$_ -replace "\*", "@"} |
Set-Content C:\Scripts\Test.txt

これは、.NET 正規表現をサポートし、正負のルックアヘッドや、バージョン 6.x 以前の正規表現では notepad++ がサポートしていなかったあらゆることをサポートしています (notepad++ が大好きなだけに)

14  Ian Pugsley  2011-09-23


そのためのfnr.exeを見つけました。GUIとコマンドラインがあります

複数のファイルでテキストを検索して置換するためのオープンソースツール

Features

  • 単一ファイルのダウンロード – fnr.exe (127kb)
  • Windowsアプリケーションやコマンドラインを使用して、複数のファイル内のテキストを置換します
  • マッチした場所を見るためにのみ検索します
  • Case-sensitive searching
  • 1つのディレクトリ内のファイルを検索したり、サブディレクトリを再帰的に検索したりすることができます
  • Regular expressions
  • 複数行のテキストを検索して置換します
  • コマンドラインボタンを生成して、バッチファイルに入れるコマンドラインテキストを作成します
  • コマンドラインヘルプ
  • Find/Replaceエンジンのユニットテスト

コマンドラインオプションを表示します

enter image description here

5  Sergius  2013-09-29


FINDSTRで正規表現が使えるようになったようです

findstr [Windows CMD]

findstrは、ファイル名の中のパターンで指定されたテキストを検索することができます。ファイル名にワイルドカード (* または ? ) が含まれている場合は、一致するすべてのファイルを検索します。Sオプションは、カレントディレクトリとそのサブディレクトリを検索します。パターンがスペースを含む場合は、/C: “検索されるテキストがあります” のように指定する必要があります。パターンを正規表現にするには /R オプシ ョ ンを用いる必要があ り ます。Iオプションは大文字小文字を区別せずに検索します

FindStrのヘルプ(Findstr /?)より

/R – 検索文字列を正規表現として使用します

Regular expression quick reference:
.        Wildcard: any character
*        Repeat: zero or more occurrences of previous character or class
^        Line position: beginning of line
$        Line position: end of line
[class]  Character class: any one character in set
[^class] Inverse class: any one character not in set
[x-y]    Range: any characters within the specified range
\x       Escape: literal use of metacharacter x
\<xyz    Word position: beginning of word
xyz\>    Word position: end of word

4  p0rkjello  2011-09-23


少し遅れてしまいましたが、JREPL.BAT は、XP 以降の Windows マシン上でネイティブに動作する JScript/バッチスクリプトベースのハイブリッドな正規表現ユーティリティです

完全なドキュメントがスクリプトに組み込まれており、JREPL /?でアクセスすることができ、ページ出力にはJREPL /??を使用することができます

JREPL は JScript に付属の標準的な ECMA 正規表現を使用します。ECMA 正規表現は powershell で利用できる .NET 正規表現ほど強力ではありませんが、それでもかなり優れています。そして、一般的なユーザーは、このユーティリティが powershell よりも使いやすいと感じると思います

組み込みの JREPL オプションはすでに多くの固有のパワーを提供していますが、ユーザーが提供した JScript を注入する機能は驚くべき可能性を広げてくれます

私の職場では標準外のexeファイルをダウンロードすることはできませんが、バッチやJScriptスクリプトを書くことには制限がないので、スクリプトを開発しました 🙂

リンクをたどって、スクリプトコードを JREPL.BAT という名前のファイルにコピーしてください。使用例や開発履歴については、そのスレッドのその後の投稿を読んでください。また、JREPL.BATを使ったStackOverflowの回答も多数あります

4  dbenham  2016-01-23


Cygwin は Unix ライクな、bash ライクな環境を提供してくれます (cmd.exe の代わりになります)。どちらのパッケージでも、’sed’、’awk’、’grep’ を参照してください

3  JRobert  2011-09-23


また、GSARを使ってコマンドライン検索と置換を行うこともできます。16進数やバイナリでも動作します。正規表現が実行できるような複雑な重労働はしませんが、基本的な検索と置換では、素早く簡単に仕事をしてくれます

0  Sun  2017-01-05


タイトルとURLをコピーしました