grep検索についてNo.38718
relaxuma さん 21/02/12 00:41
 
grep検索について教えてください。

数百ファイル程の特定の文字列を置換したいのですが
特定の行のみ置換すると言うことは出来ますでしょうか?


いずれのファイルも厄介なことに必ず
110行目と113行目に【AAA】と言う文字列があります。
前後の文字列も全く同じためgrepを実行すると当たり前ですが
110行目と113行目ともに変換されてしまいます。

これを113行目のみ【AAA】を【A AA BB】と言うような感じに置換したいのですが実
現方法はありますでしょうか

[ ]
RE:38718 grep検索についてNo.38721
秀丸担当 さん 21/02/12 10:11
 

まず、行番号を指定して置換するには、マクロを使う必要があります。
grepや「grepして置換」で行番号を指定して置換することはできないです。

例えば以下のようなマクロで、現在開いている1つのファイルについて置換して保存
できます。

setcompatiblemode 0x20000;
#c = 0;
movetolineno 1, 113;
selectline;
replacedown "【AAA】", "【A AA BB】",inselect;
if(result!=false){
  #c=#c+1;
}
if(#c != 0) {
    question filename2+"\n保存しますか?";
    if(result==yes){
        save;
    }
}

マクロは、マクロファイル用のフォルダに拡張子.macで保存します。
マクロの実行は[マクロ]→[マクロ実行...]で行います。
問い合わせを無くす場合は、questionの行から4行分を、単にsave;だけにするといい
です。

複数のファイルとなるとちょっと面倒なのですが、複数のファイルに対してマクロを
実行するという話題が最近ありました。
以下の会議室の内容が参考になると思います。

https://www.maruo.co.jp/turukame/4/x00622_.html

この手法を使って最初のマクロを実行するようにするとできると思います。

もしこれらの方法を使われる場合、複数のファイルの保存があるため、何か間違えた
らまずいので、1つのファイル上や、ファイルの少ないフォルダで試したり、バック
アップをしてからにすることをお勧めします。

[ ]