我使用egrep -R
其次是含有约10工会正则表达式,所以像:.jpg | .png | .gif
等,这工作得很好,现在我想以取代.bmp
发现的所有字符串
我想的是一样的东西
egrep -lR "\.jpg|\.png|\.gif" . | sed "s/some_expression/.jpg/" file_it_came_form
所以这里的问题是,我该怎么做sed
类似工会的正则表达式,如何告诉它更改保存到它从得到的输入文件。
使用此命令:
egrep -lRZ "\.jpg|\.png|\.gif" . \
| xargs -0 -l sed -i -e 's/\.jpg\|\.gif\|\.png/.bmp/g'
egrep
:使用扩展的正则表达式查找匹配的行
-l
:只列出匹配的文件名
-R
:通过所有给定的目录递归搜索
-Z
:使用\0
作为记录分隔符
"\.jpg|\.png|\.gif"
:匹配字符串".jpg"
,".gif"
或".png"
之一
.
:开始在当前目录下搜索xargs
:执行与所述标准输入作为参数的命令
-0
:使用\0
作为记录分隔符。这一点很重要,以匹配-Z
的egrep
并避免在输入文件名空格和换行被愚弄。
-l
:使用每一个命令行参数sed
:流编辑器
-i
:替换输出输入文件而不制作备份
-e
:使用下面的参数作为表达
's/\.jpg\|\.gif\|\.png/.bmp/g'
:更换琴弦".jpg"
,".gif"
或".png"
与".bmp"
所有出现说实话,虽然我爱SED适当的任务,这绝对是perl的任务 - 这是这种单行真正的功能更强大,尤其是“写回它来自哪里”(Perl的-i
开关做它为你,必要时也可以让你保持旧版本,例如周围标有.bak的,只是使用-i.bak
代替)。
perl -i.bak -pe 's/\.jpg|\.png|\.gif/.jpg/
而不是在sed复杂的工作(如果甚至有可能出现),或AWK ...
另一种方式来做到这一点
find . -name *.xml -exec sed -i "s/4.6.0-SNAPSHOT/5.0.0-SNAPSHOT/" {} \;
关于上述命令一些帮助
这一发现将做您喜欢的由.
显示当前目录
-name
该文件的名称在我的情况下,它的pom.xml可以给外卡。
-exec
执行
sed
流编辑器
-i
忽略大小写
s
是用于替代
要搜索的字符串/4.6.0.../
/5.0.0.../
字符串被替换
我无法得到任何命令的此页面上为我工作:sed solution添加一个新行到它的所有处理的文件的末尾,而perl solution无法从发现接受足够的议论。我发现这个解决方案,它完美的作品:
find . -type f -name '*.[hm]' -print0
| xargs -0 perl -pi -e 's/search_regex/replacement_string/g'
这将递归下降的当前目录树,并在search_regex
或replacement_string
后缀的文件与.h
替换.m
。
我也用rpl为此,在过去。
尝试一些使用for循环
for i in `egrep -lR "YOURSEARCH" .` ; do echo $i; sed 's/f/k/' <$i >/tmp/`basename $i`; mv /tmp/`basename $i` $i; done
不漂亮,但应该做的。
我用例是我想与foo:/Drive_Letter
在我的情况,我能够用下面的代码做它来代替foo:/bar/baz/xyz
。我在那里有散装的文件相同的目录位置。
find . -name "*.library" -print0 | xargs -0 sed -i '' -e 's/foo:\/Drive_Letter:/foo:\/bar\/baz\/xyz/g'
希望帮助。
UPDATE S |富:/驱动器号:|富:/ BA /巴兹/ XYZ | G