您尚未登录。

#1 2015-03-07 00:52:29

糊涂
本尊
注册时间: 2012-10-30
帖子: 203

sed命令批量修改文件一例

(与小白共享,老鸟请闭眼)
命令:

sed -i -f ../sed-change `grep -rl "http://ayni.ceph.com/public/js/ceph.js"`

说明:
1、sed的 -i 选项表示直接(就地)处理文件。如果不加 -i 选项,sed仅仅将处理结果输出到屏幕而不对所处理的文件做修改;加了 -i 则直接修改所处理的原始文件。
2、sed的 -f 选项表示使用sed操作脚本,紧跟 -f 后面的 ../sed-change 就是sed操作脚本,内容为:

s/http:\/\/ayni.ceph.com\/public\/js\/ceph.js/..\/_static\/ceph.js/

脚本含义:搜索字符串“http://ayni.ceph.com/public/js/ceph.js”并用新字符串“../_static/ceph.js”替换。
3、两个反引号(即 `)括起来的部分是sed要处理的文件,用grep逐一搜索出来并逐一传递给sed处理。grep的 -r 选项表示递归处理子目录,-l 选项(小写的字母L)表示只列出匹配行所在文件的文件名(每个文件名只列一次),文件名之间用换行符分隔。

最近编辑记录 糊涂 (2015-03-07 01:25:58)


想装X,别装X

离线

#2 2015-03-07 12:03:38

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,493
个人网站

Re: sed命令批量修改文件一例

这样写更好读:

s=http://ayni.ceph.com/public/js/ceph.js=../_static/ceph.js=

建议用 $() 而不是 ``。

还有,符合条件的文件名里有空格就会出错了。

还有,BSD 系统上的 sed -i 选项后必须给出作为备份文件的后缀,否则会报错。

最近编辑记录 依云 (2015-03-07 12:06:20)

离线

#3 2015-03-07 14:51:37

atmouse
会员
注册时间: 2011-08-24
帖子: 701

Re: sed命令批量修改文件一例

哈哈,糊糊好可怜

离线

#4 2015-03-08 02:17:34

糊涂
本尊
注册时间: 2012-10-30
帖子: 203

Re: sed命令批量修改文件一例

atmouse 说:

哈哈,糊糊好可怜

没啥。我本来就是现学的。怕以后忘了先记下来。百合指出的这几点,以后我会一一研习。再说,我开头第一句就声明了,“老鸟们闭眼”

最近编辑记录 糊涂 (2015-03-16 12:01:20)


想装X,别装X

离线

页脚