greping和替换2个文件路径

时间:2013-03-22 14:10:01

标签: linux unix grep cygwin

我目前正在开展一个项目,我希望在多个地方更改图片。

  old file dir: /images/icons/helpPop.png
  new file dir: /public/website_pngs/icons-buttons/button_question_mark.png

我想试试

grep -rl 'images/icons/helpPop' . | xargs sed -i 's/images/icons/helpPop/public/website_pngs/icons-buttons/button_question_mark/g'

但我知道这不行。我正在寻找分隔符,并希望得到一些额外的建议。

2 个答案:

答案 0 :(得分:0)

for i in grep -rl 'images/icons/helpPop' . ; do cp $i $i.bak; sed -i 's/images\/icons\/helpPop/public\/website_pngs\/icons-buttons\/button_question_mark/g' < $i.bak > $i; done

答案 1 :(得分:0)

  

我正在研究分隔符,并希望得到一些额外的建议。

一些建议:

  • 如果旧/新目录已修复,请尝试将其保存为变量
  • 在sed中使用不同的分隔符,例如"s#$old#$new#g" or "s@$old@$new@g"(双引号!)
  • 为了更安全,您最好逃避旧目录文本中的. (period/dot)。因为它在正则表达式中表示any char可能是一个像这样的纯文本的危险操作。 (幸运的是,你的路径中没有.* ^ _ ^)

或者你想要工作代码?

编辑评论:

您不需要“设置”分隔符,只需使用它,就像您使用/一样,看一下这个例子:

kent$  echo "/////"|sed 's#/#?#g'
?????

kent$  echo "/////"|sed 's^/^?^g'
?????

kent$  echo "/////"|sed 's%/%?%g'
?????

kent$  echo "/////"|sed 's;/;?;g'
?????