- ベストアンサー
正規表現で置換
正規表現の初心者です。 テキストエディタを使って、「@:」で始まる以外の行の先頭に「//」を挿入してコメントアウトしたいのですが、正規表現がうまく書けません。 検索対象: ^[^(@:)] 置換文字列: // でいいのかなと思ったのですが、[]の中ではグルーピング用の()も文字として認識されてしまうのですね。 どのように書いたら正しく置換されるでしょうか。 どうかご教示ください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
一回でやろうと考えない方が無難な気がします。一番確実なのは、まず全ての行頭に//を追加して、次に//@:を@:に置換することじゃないでしょうか? というのは、うまくマッチさせる正規表現を書けたとしても、「行頭+パターン」の形になるため、パターンにあたる行頭の1文字が//に置換されてしまう結果になるんじゃないかと心配なので。 なお、エディタの種類によっては、行頭に置換をかけると永遠に置換し続けてしまう物もありうるので、注意してください。
その他の回答 (2)
実行方法も一応書いてあったので気にしてなかったんですが、コマンドを触り慣れていない人には解りにくかったですかね… まず、先のスクリプトを実行するためには、awk本体を入手する必要があります。とりあえずベクターのダウンロード先を参考URLに…って書いたものの、OSはWindowsですよね?以下の話は、基本Windowsとして見てください。 インストールですが、安直には本体(gawk.exe)とスクリプトと加工したいファイルを、全部一つのフォルダに放り込んでしまえばいいです。コマンドを叩くので、あまり深いサブフォルダに作るとめんどくさいため、C:\testみたいな浅い階層がお勧めです。その上で、コマンドプロンプトを開いて次のように実行します。 cd c:\test gawk -f 今回付けた適当なファイル名.awk 加工元ファイル名 > 出力先ファイル名 ここで注意がふたつ。まず、gawk -fの-fは、必ず小文字でなければなりません。-Fでは違う意味になってしまい、うまくいかなくなります。他の部分は大文字小文字はどっちでもいいです。もう一つは、加工元ファイル名と出力先ファイル名は、必ず別々にしてください。同じにすると、悲しい結末が待っています。 これで試してください。
お礼
ご親切にどうもありがとうございます。こちらの方法は明日出社してから試してみます。フローが確立されたら自分以外の人間も同じ作業をすることになるので、新規インストールが必要な手順でもよいか聞いてみます。
複数の行を対象にする場合は、正規表現だけでは無理です。awkやperlなどの、テキスト処理に強いスクリプト言語が必要では?ちなみに、awkだと次のような感じのスクリプトになります。これをコピペして適当なファイル名.awkとして保存し、実行します。awkの詳細は、参考URLをどうぞ。なお、インデントはここのシステムが半角スペースを勝手に消してしまうため、それを回避するために全角で入れています。実際に使う場合は、半角スペースに置換してください。 # @:とその次の行以外をコメントアウトする { if($0 ~/^@:/){ print getline print next } print "// " $0 }
補足
たびたびのご回答、誠にありがとうございます。私もいずれはスクリプト言語の1つくらいは使えるようになりたいと思っています。 ところで、非常に基本的なことで恐縮なのですが、 >適当なファイル名.awkとして保存し、実行します。 「.awk」で保存はしたのですが、実行の仕方がわかりません。 添付してくださったAWKの開設サイトにもここまで基本的なことは書いていないようです。 恥ずかしながら、よろしくお願いします。
補足
早速のご回答ありがとうございます。この件に関しては、2回に分けての作業で対応できそうです。 ところで、「@:」で始まる行とその次の行以外に「//」を付加してコメントアウトするにはどうしたらいいのでしょうか。 ----------------------------- コメントアウト @:インデックス この行はコメントアウトしない コメントアウト ----------------------------- となっている場合に、コメントアウトの行だけ「//」を付けたいのです。