web-dev-qa-db-ja.com

コマンドラインからの正規表現置換

コマンドラインから正規表現置換することは可能ですか?現在、私はこれを行うためにnotepad ++を使用しています。コマンドラインでは、FINDSTRのみを使用でき、マッチしたファイル/行のみを検索できます。

編集:
多分VBスクリプトを作成してcmdから実行することができるでしょうか?私はコンテンツを含むファイル「hi.vbs」を作成しました

Msgbox "Hi Buddy"

次に、cmdを使用すると、コマンドラインから「hi」と入力して直接実行できます。
そのため、バッチスクリプトでそれができない場合は、VBスクリプトトラフバッチを使用できます。

22
Aziz

ここに行く
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を表示します

11
barlop

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

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

次の機能があります。

  • Perl互換の正規表現を使用した検索
  • 置換テキストでグループマッチングを使用する
  • WindowsおよびUnixの行末をサポート
  • Unicodeサポート
  • 複数の検索/置換引数を受け入れます
  • オプションはオプションファイルで提供されます。
  • ファイルをスキャンする
  • プレビューモード
  • 行と完全なファイルマッチングモード

enter image description here

27
user2005187

Scripting Guyは PowerShellでこれを行う方法 をカバーしています(最新のWindows OSでは追加のダウンロードは不要です。おそらくすでにインストールされています)。

起動して、以下を実行します(* とともに @):

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

これは、肯定的および否定的な先読みを含む 。NET正規表現 をサポートし、notepad ++がバージョン6.x以前の正規表現でサポートしていなかったすべての方法をサポートします(私が気に入っている限り)。

13
Ian Pugsley

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

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

特徴

  • 単一ファイルのダウンロード-fnr.exe(127kb)
  • Windowsアプリケーションまたはコマンドラインを使用して複数のファイルのテキストを置き換える
  • 一致が見つかる場所を確認するには、検索のみ
  • 大文字と小文字を区別した検索
  • 1つのディレクトリまたは再帰的なサブディレクトリでファイルを検索する
  • 正規表現
  • 複数行のテキストを検索して置換する
  • コマンドラインボタンを生成して、バッチファイルに入れるコマンドラインテキストを作成します
  • コマンドラインヘルプ
  • 検索/置換エンジンの単体テスト

コマンドラインオプションの表示

enter image description here

5
Sergius

パーティーには少し遅れますが、 JREPL.BATはハイブリッドJScript /バッチスクリプトベースの正規表現ユーティリティ であり、XP以降のWindowsマシンでネイティブに実行されます。

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

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

組み込みのJREPLオプションは、すでに多くの固有の能力を提供していますが、ユーザーが提供したJScriptを挿入する機能は、本当に驚くべき可能性を開きます。

私の職場では非標準のexeファイルのダウンロードが許可されていないため、スクリプトを開発しましたが、バッチまたはJScriptスクリプトの記述に制限はありません:-)

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

4
dbenham

FINDSTRで正規表現を使用できるように見えます

findstr [Windows CMD]

findstrを使用すると、テキストを検索できます(ファイルfile-nameのpatternで指定されているとおりです。file-nameにワイルドカード(*または?)が含まれている場合、一致するすべてのファイルが検索されます。オプション/ 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

2つの適切な選択肢は Cygwin のどちらかであり、Unixのようなbashのような環境(cmd.exeの代替)を提供します。 Unxutils 、個々のUnixユーティリティのコレクションのWin32ポート。どちらのパッケージでも、「sed」、「awk」、「grep」を参照してください。

3
JRobert

[〜#〜] gsar [〜#〜] を使用して、コマンドライン検索と置換を実行することもできます。 16進数と2進数でも動作します。正規表現で実行できるような複雑な処理は行われませんが、基本的な検索と置換では、迅速かつ簡単に処理を実行できます。

0
Sun