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


21

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

EDIT:
VBスクリプトを作成してcmdから実行することは可能ですか コンテンツを含むファイル「hi.vbs」を作成しました

Msgbox "Hi Buddy"

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


最後に決定的な文を入れて、編集部分全体が問題を指していないというのは、「私はVBでハローワールドを作成します、バッチでそのようなものを作成できますか?@IanPugsleyが投稿した答えを確認してください正規表現の置換を行う簡単な方法
mjsr

@Aziz:これらの答えのどれかがあなたのために働きましたか?もしそうなら、あなたはそれを受け入れますか?それはこのコミュニティへの参加の一部です。私たちが助けてくれたことに感謝します。受け入れられた回答に与えられる評価ポイントは、他のユーザーが互いの経験を評価するのに役立ちます。ありがとう。
-Jロバート

コマンドラインからMYVBREPLACE(.vbs)FILENAME REGEXPATTERN REPLACEMENTのようなものを呼び出すことを考えていました。
アジズ

回答:


11

こちらから
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


驚くべきクレイジーツール!!! このツールはあまりにも高度でした。私はまだそれを使用することができませんでしたが、gnu.org / software / sed / manual / sed.html#The-_0022s_0022-Commandを読んだとき、これは予想以上に多くのことができることがわかります。どうもありがとう
アジズ

bashの新しいバージョンも正規表現を実行できます。場合によっては単純なタスクに十分であり、sedを使用する必要もありません。
vtest

誰も知らない場合に備えて、vtestが言ったことを再確認してください。cygwinにはbashがあります。
barlop

sedが複数行の置換で吸う
-kofifus

1
@KennyEvitt cmdシェルは、ユニコードutf8 chcp 65001でchcpを表示および使用するために微調整が必​​要です(おっしゃるように、utf16 encoding.chcp 1200およびchcp 12001はサポートされてい ません) stackoverflow.com/questions/9321419/…ミンティ。確かにパワーシェル。ただし、utf-8はcmdまたはpowershellでサポートされています。サポートフォントがcourier newのように使用されている限り、またコードページ65001である限り。utf16エンコーディングにはcmd / uがあります。
barlop

26

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

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

次の機能があります。

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

ここに画像の説明を入力してください


4
これは素晴らしいです!あなたが私のようで、例を必要とする場合、これはファイル内の「foobar」を「foofighters」に置き換えます。rxrepl.exe -f file.txt -a -s "(foo)bar" -r "\ 1fighters"
Dunc

1
また、githubなどのソースをたまたま持っていますか?オープンソースを意図していない場合は完全に理解できますが、私は非常に興味があります。
kayleeFrye_onDeck

1
@Steztric本当に?私は64ビットウィンドウを実行していますが、これを実行するのに問題はないようですC:\WINDOWS\System32\cmd.exe
-kayleeFrye_onDeck

1
素晴らしいツール!Windows Server Std 2012 R2 x64で問題なく実行されています。THX!
kwrl

2
すばらしいツールです。あなたがまだそれを維持していることを望みます
水っぽい

12

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

起動して、次を実行します(a *をに置き換えます@):

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

これは、正および負の先読みを含む.NET正規表現をサポートし、notepad ++はバージョン6.xより前のregexではサポートしていなかったすべての方法をサポートします(notepad ++が大好きです)。


1
Notepad ++は、バージョン6の時点で完全なPCREをサポートします。-
ボブ

5

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

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

特徴

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

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

ここに画像の説明を入力してください


1
かなりいい-GUIで「find」ステートメントを確認し、「Gen Replace Command Line」をクリックして、コマンドライン呼び出しを使用する準備をします。コマンドライン構文に慣れるために時間を費やす必要はありません。
-sarh

変更を行った後、これを終了させることができませんでした。Enterキーを押して閉じる必要があります

@ G-。バッチファイルから実行される場合、<enter>を待つ必要はありません。
セルギウス

別のファイル名/拡張子に出力する方法を見つけることができませんでした
リック

4

FINDSTRで正規表現を使用できるようです

findstr [Windows CMD]

findstrは、テキストを検索できます(ファイルfile-nameのパターンで指定されます。file-nameにワイルドカード(*または?)が含まれる場合、一致するすべてのファイルを検索します。オプション/ Sは、現在のディレクトリとパターンにスペースが含まれる場合、/ C: "検索するテキスト"のように指定する必要があります。パターンを正規表現に変換するには、/ Rオプションを使用する必要があります。鈍感。

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

ご回答いただきありがとうございますが、これは私の質問ではありませんでした。
アジズ

2
findstrファイル内のテキストを置き換えることはできません!
ケニーエビット

4

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

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

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

組み込みのJREPLオプションは既に多くの固有の機能を提供しますが、ユーザーが提供するJScriptを注入する機能により、驚くべき可能性が広がります。

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

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


3

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


2
unxutilsは古いです。今の事はgnuwin32
barlop

ご提案いただきありがとうございます。理解できませんでしたが、SEDが問題であることがわかりました。
アジズ

2018年時点で@ barlop、gnuwin32も古くなっています。cygwinは最新です!
-barlop

0

GSARを使用して、コマンドラインの検索と置換を実行することもできます。16進数およびバイナリでも動作します。正規表現が実行できる複雑な面倒な作業は行いませんが、基本的な検索と置換のために、すばやく簡単に作業を行います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.