如何对多个文件执行字符替换(search/replace)

答案是Emacs。

  1. 用dired选文件。这又有两个变化:M-x dired 或者C-x d比较像ls,就是这一层的文件;M-x find-dired则包括所有的子目录,也就是说像find。不管用哪个,出来了文件之后你可以一个一个的选(按m键选,u键勾掉),也可以用%m组合来选符合文件名正则表达的文件。更强大的功能是%g, 对文件的内容执行正则搜索。
  2. 对选好的文件执行字符替换。热键是Q或者M-x dired-do-query-replace-regexp。emacs会一个一个的问你要不要替换。y选替换,n不替换,C-g退出,大写Y则等于对所有之后的问题回答y(Emacs version >= 23.0)。
  3. 弄完之后还要存盘。你当然可以一个buffer一个的存盘,但如果开的文件多了这个方法就比较麻烦了。解决办法有两个,一个简单点的是C-x s (M-x save-some-buffers); 另外一个cool一点的办法是用ibuffer:  M-x ibuffer调出ibuffer,然后用*u来选中所有未存盘的buffers,S全部存盘,D全部关闭。

Emacs is the ONE, TRUE editor.

本文基本上参照李殺网的攻略:

http://xahlee.org/emacs/find_replace_inter.html

,

  1. #1 by riczxc on 一月 15, 2011 - 7:09 下午

    请问倘若用emacs的话,跟以下方法比的优点缺点是?
    # !/bin/bash
    for ii in *.cpp;
    do sed 命令 $ii >> $ii
    done

    • #2 by qiuxing on 一月 16, 2011 - 5:20 上午

      第一,你不用专门写一个script。第二,emacs是交互式的,你选文件,文本替换都可以自己手动控制。跳过一两个文件,或者某个文件里面某个你不想替换的文本都很容易。对了,你那个script其实挺危险的,直接覆盖源文件,万一sed命令执行效果不是你想要的你可就惨了!在emacs里就算你按错了一个键,马上用C-x u就undo了,安全多了。

      至于缺点?缺点大概是你得学emacs,呵呵。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: