人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Macで一括置換を行うツールを探しています。

WindowsからMacにスイッチしたのですが、特定ディレクトリ内のファイルに対して一括置換(複数行)を行うためのツールが見つからずに困っています。
Windowsでは、「GrepReplace」(http://dhive.jp/dhappli/grepreplace.html)というフリーソフトを愛用していたのですが、同じようなソフトはないでしょうか?(有料でも構いません)

どうぞよろしくお願い致します。

●質問者: dy7
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● degucho
●20ポイント

自分も同じような乗り換えを検討していたので
探してみました。未使用なのでよかったら感想とか教えてください。

iSED/国産フリーSED GUI
http://homepage.mac.com/lightway/download/

Search & Replace/バージョン上がってシェアになったのかな?
http://search-and-replace.en.softonic.com/mac
http://www.macsoft.jp/posts/view/732

App Storeの商品
http://itunes.apple.com/jp/app/araxis-replace-in-files/id416511337?mt=12
http://itunes.apple.com/jp/app/find-replace-it!/id434067076?mt=12


dy7さんのコメント
回答ありがとうございます。 試してみます。

2 ● なぜなに
●40ポイント

☆Mac用の日本語のフリーウェアで、
"多機能型リネームソフトShupapan"というのがあります。
MacOS 10.7(Lion)に暫定的に対応しています。
特定の条件と一致するファイルのみ文字列の追加/削除、
文字列の検索・置換、文字変換/言語変換等をすることができます。
また、複数の処理を組み合わせて実行することもできるようです。:
http://sunsky3s.s41.xrea.com/shupapan/features/index.html

☆専門ツールというよりは、テキストエディタの機能なのですが、
Mac用の"Jedit X"の「検索/置換機能」でも、特定ディレクトリ内の
複数のファイルをファイルセットで指定して、一括置換ができるそうです。
シェアウェアですが、無料で試用できます。日本語対応。:
http://www.artman21.com/jp/jedit_x/

☆英語の場合は、フリーで、"MassReplaceIt"という専用ツールがあります。:
http://www.hexmonkeysoftware.com/


dy7さんのコメント
回答ありがとうございます。 「Shupapan」は使ってたんですが、これってリネーム専用じゃないんですか?中身の検索・置換もできるのでしょうか?

なぜなにさんのコメント
本文の方はJedit Xと連携させて使ったほうが良いと思います。

3 ● kodairabase
●20ポイント

grepArtee
http://www.geditcom.com/grepArtee/


dy7さんのコメント
回答ありがとうございます。 試してみます。

4 ● a-kuma3
●20ポイント

これを機会に、コマンドでやることを覚える、というのはどうでしょうか?
いろいろなコマンドがあるので、いっぺんに覚えることは難しいですが、それだけいろいろなことができるということなので、柔軟性はかなりあります。

例として、/Users/a-kuma3 配下にある *.txt なファイルに対して、それぞれのファイルに含まれる foo を bar に全て置き換える場合です。
変換前のファイルを *.txt.bak という名前で残します。

unix ターミナルを開いて、以下のコマンドを打ちます。

$ for f in `find /Users/a-kuma3 -name "*.txt" -print` ; do mv ${f} ${f}.bak ; sed -e "s/foo/bar/g" ${f}.bak > ${f} ; done

最初の $ は、プロンプトで、最初から表示されている文字です。
長くて折り返してますが、for から、最後の done まで、続けて一行で打ち込みます。


dy7さんのコメント
コマンドでの操作は時々使うのですが、複数行の一括置換を行うのは難しいかなぁと考えています。 例えば数十行分のHTMLコードをまとめて置換したい場合など、対象のコードをコピー&ペーストで指定したいです。(正規表現などを使わず、そのままコピペが理想) こういったことを考えると、他の回答者様からこれまでに挙げていただいたアプリをみても、どれも目的に合わないようで。。。

a-kuma3さんのコメント
ある程度パターンは限られますが、複数行の置き換えは sed でもできます。 複雑なものになれば、awk や ed を使う手もあります。 まあ、(コマンドにとって)複雑になれば、お手軽とは言えなくなるのが難点かな。 何か、具体的な例を提示してもらえるなら、チャレンジしてみますが =)

dy7さんのコメント
早速のご回答ありがとうございます。 例えば、あるディレクトリ(と、その下位ディレクトリすべて)内のファイル(拡張子を指定)に対して、20〜30行くらいのコードを、同じくらいの行数のコードに置換したいのですが、やはり面倒ですよね? 理想の操作イメージとしては、置換前のコードと置換後のコードをそれぞれテキストボックスにペーストして、ディレクトリなどを選択してから、ボタン1個で置換完了!という形が良いのですが。。。(^^;

a-kuma3さんのコメント
>> やはり面倒ですよね? << 確かに、ちょっとは =) 長くなるんで、別の回答をおこしました。

5 ● a-kuma3
●100ポイント ベストアンサー

コマンドで何でもできる、みたいなことを書いた手前、ちょっとやってみました。

まず、置き換えのための準備。

data = STDIN.read

rep_src = open("/Users/a-kuma3/rep/src.txt").read
rep_dest = open("/Users/a-kuma3/rep/dest.txt").read

pos = data.index(rep_src)
if ! pos.nil? then
 data = data[0, pos] + rep_dest + data[pos + rep_src.length .. data.length]
end

puts data


で、置き換えは、以下のコマンド。

$ for f in `find /Users/a-kuma3/data -name "*.txt" -print` ; do mv ${f} ${f}.bak ; ruby /Users/a-kuma3/rep/replace.rb < ${f}.bak > ${f} ; done


あるディレクトリ(と、その下位ディレクトリすべて)内のファイル(拡張子を指定)に対して、

「あるディレクトリ」に相当するのは、find の直後の /Users/a-kuma3/data です。
「拡張子を指定」に相当するのは、-name の直後の "*.txt" です。
# 置き換えの必要が無くても、*.txt.bak ができちゃうのが、手抜き (^^;

以下、簡単な説明。

ぼくは、perl とか苦手なので、ruby というコマンドを使っています (Mac OS X なら入っているはず) が、似たようなことは perl や php というコマンドでもできます。
画面を用意してませんが、テキストの置き換えくらいなら、このくらい短いコードを書くだけで、できちゃうんだよ、という例だと思ってください。
頑張れば、もっと複雑なこともできます。

プログラムに興味が無ければ、replace.rb の内容を理解する必要はないと思います。
人力検索で「こういうことをやる Excel のマクロを書いてくれ」という質問がときどきでてくるように、他のことをやりたくなったら、質問をあげれば、良いんじゃないかな、と。

# そのうち、自分で書きたくなるようになりますよ、きっと =)


dy7さんのコメント
なるほど。詳しい説明をありがとうございます! perlやPHPは毎日のように使ってますので、自分でも書けそうです。 アプリを探すより、自作のスクリプトで処理すればイイという点、とても参考になりました!ありがとうございました!

a-kuma3さんのコメント
perl いける方だったんですね。 だったら、シェルスクリプトは、すぐにちょちょいで書けるようになります。 まあ、ファイルを探すところから perl で書けるじゃん、って話もありますけど =)
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ