我想用指定的字符替换部分文件名。
例如:
$ ls
SubNetwork=RNCRAM955E,MeContext=RNCRAM955E_statsfile.xml
我想将RNCRAM955E
替换为RNCMST954E
这是我预期的输出。
$ ls
SubNetwork=RNCMST954E,MeContext=RNCMST954E_statsfile.xml
以下是我的代码:
$ find ./ -name '*.xml' | xargs -i echo mv {} {} | sed 's/RNCRAM955E/RNCMST954E/3g' | sh
mv ./SubNetwork=RNCRAM955E,MeContext=RNCRAM955E_statsfile.xml ./SubNetwork=RNCMST954E,MeContext=RNCMST954E_statsfile.xml
mv ./SubNetwork=RNCRAM955E,MeContext=RNCRAM955E_statsfile.xml ./SubNetwork=RNCMST954E,MeContext=RNCMST954E_statsfile.xml
mv ./SubNetwork=RNCRAM955E,MeContext=RNCRAM955E_statsfile.xml ./SubNetwork=RNCMST954E,MeContext=RNCMST954E_statsfile.xml
mv ./SubNetwork=RNCRAM955E,MeContext=RNCRAM955E_statsfile.xml ./SubNetwork=RNCMST954E,MeContext=RNCMST954E_statsfile.xml
我无法理解3g
的代码究竟是什么意思。
在我看来:
sed s/xx/xx/3g
是否意味着将匹配模式从第3个替换为结尾,sed s/xx/xx/3
表示仅替换第3个匹配模式?
顺便说一下,|sh
的确切含义是什么,我认为它会使echo
之后的命令作为shell执行,对吗?
答案 0 :(得分:0)
3
表示替换第3场比赛,g
表示替换所有比赛。当你一起使用它时,它意味着从第3个开始替换所有匹配。
管道到sh
意味着执行sed
的输出作为shell命令。
大多数Linux发行版都有一个rename
命令,可以让这更容易:
find . -name '*.xml' -exec rename 's/RNCRAM955E/RNCMST954E/' {} +