コマンドラインからの正規表現置換は可能でしょうか?今のところ、私はこれを行うために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
- ラインとフルファイルのマッチングモード
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エンジンのユニットテスト
コマンドラインオプションを表示します
5 Sergius 2013-09-29
FINDSTRで正規表現が使えるようになったようです
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