Linux文件名替换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux文件名替换相关的知识,希望对你有一定的参考价值。

1、直接用mv移动命令
mv a**.cpp b**.c
#移动以a开头.cpp文件并重命名成以b开头.c文件2、用文本处理工具awk操作
ls a*.cpp | awk 'n=$0;sub(/^a/,"b");sub(/\.cpp$/,".c");system("mv "n" "$0)'
#ls命令查看所有a开头的.cpp文件,然后|(管道符)传递到awk命令处理,用sub实现第一个位置的替换^a以a开头的替换成b开头。3、用for循环字符串截取方法
for filename in a*.cpp
do
len=$#filename
newName="b"$filename:1:len-3
mv $filename $newName
done4、用sed的正则表达式替换
for filename in a*.cpp
do
newName=`echo $filename|sed -r 's/^a(.*\.c)pp$/b\1/'`
#匹配以a开头以.c结尾的文件,然后替换成b
mv $filename $newName
done
参考技术A 1.用for灵活,文件名中字符替换,加日期等都可
先用下面语句测试一下
for
i
in
*aa*
;do
nn=$(echo
$i
|
sed
's/aa/bb/')
;echo
"$nn";done
保险起见,只拷贝
for
i
in
*aa*
;do
nn=$(echo
$i
|
sed
's/aa/bb/')
;cp
"$i"
"$nn";done
这是更名,慎用
for
i
in
*aa*
;do
nn=$(echo
$i
|
sed
's/aa/bb/')
;mv
"$i"
"$nn";done
2.用rename简洁
先用-n开关测试
rename
-n
's/aa/bb/'
*
测试无误去掉-n进行更名
rename
's/aa/bb/'
*
参考技术B 方法一,用awk的sub函数替换
ls a*.cpp | awk 'n=$0;sub(/^a/,"b");sub(/\.cpp$/,".c");system("mv "n" "$0)'
方法二,用sed的正则替换
for filename in a*.cpp
do
newName=`echo $filename|sed -r 's/^a(.*\.c)pp$/b\1/'`
mv $filename $newName
done
方法三,用bash特有的字符串截取方法
for filename in a*.cpp
do
len=$#filename
newName="b"$filename:1:len-3
mv $filename $newName
done

linux系统批量替换文件中的字符

该目录下有多层子目录,每个子目录中有若干个.shtml文件,现在需要批量替换.shtml文件中的如下内容
将如下内容:
<div class="zmcon-sm"><strong>声明:</strong>凡注来源“测试网”以及标有“测试网整理”字样的稿件,未经测试网书面授权不得以任何方式转载,已授权转载的须注明来源为“测试网”。</div>
替换成:
<div class="zmcon-sm"><strong>声明:</strong>凡注来源“测试网”字样的稿件,未经新文化报书面授权不得以任何方式转载,已授权转载的须注明来源为“测试网”。</div>

其实就是替换 “声明:” 与 “ </div>”之间的内容。

也可以替换整行
----------------------------------------------

我找到了sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录` 这个命令,但是需要替换的内容太长了,而且其中还带有各种标点符号,我就不会了。。。 请教了。
楼下给个QQ号要收费,收费我来百度知道干嘛?

for i in $(find . -type f -name "*.shtml");do
sed -i 's/<div class="zmcon-sm"><strong>声明:<\\/strong>凡注来源"测试网"以及标有"测试网整理"字样的稿件,未经测试网书面授权不得以任何方式转载,已授权的须注明来源为"测试网"。<\\/div>/<div class="zmcon-sm"><strong>声明:<\\/strong>凡注来源"测试网"字样的稿件,未经新文化报书面授权不得以任何方式转载,已授权的须注明来源为"测试网"。<\\/div>/g' $i
done


注意里面的标点符号,我测试的时候字符串里面的双引号是使用的英文双引号。

参考技术A 没问题, 这个可以帮忙编写一个sed 的shell程序来搞定的哦
能否看看wo 的网名啊 ?帮忙搞定一下 啊

以上是关于Linux文件名替换的主要内容,如果未能解决你的问题,请参考以下文章

linux 给文件替换字符串/替换内容/替换某行 (shell,sed)

Linux文件名替换

Linux批量替换多个文件中字符串

linux批量替换文件夹名,文件名,文件内容命令

linux系统批量替换文件中的字符

linux下批量替换文件内容