如何 ack-grep 替换多个单词的字符串

如何 ack-grep 替换多个单词的字符串

from以下命令将当前目录或其子目录中任何文件中出现的该词替换为to

ack-grep -l --print0 --text from | xargs -0 -n 1 sed -i -e 's/from/to/g'

我从线。

如何替换包含多个单词而不是一个单词的字符串?例如替换laughing babiessmiling little children

我尝试了以下方法,但是没有效果:

ack-grep -l --print0 --text 'laughing babies' | xargs -0 -n 1 sed -i -e "s/'laughing babies'/'smiling little children'/g"
ack-grep -l --print0 --text 'laughing babies' | xargs -0 -n 1 sed -i -e 's/"laughing babies"/"smiling little children"/g'

不知道这是否重要但我仍在继续Ubuntu 11.10

答案1

实际上,您不需要引号,sed可以处理空格,并且引号将被视为模式的一部分(除非您将其转义)。只需执行以下操作:

ack-grep -l --print0 --text 'laughing babies' | xargs -0 -n 1 sed -i -e 's/laughing babies/smiling little children/g'

我不明白你为什么要这个grep部分,你可以sed直接在目录中的所有文件上运行,sed速度很快:

sed -i -e 's/laughing babies/smiling little children/g' *

相关内容