
grep "node01" -rl ./salt/* --exclude=*.tar.gz
其实这里的 -r表示递归,-l表示输出文件名,
也可以将 -rl替换为-rn,-n表示是哪一行,会输出行号详细信息
grep "node01" -rn ./salt/* --exclude=*.tar.gz
替换字符串:
把./salt/*目前下所有文件进行遍历,查是否包含node01字符串的,不包括tar.gz结尾的文件。然后把node01用test01进行批量替换。
grep "node01" -rl ./salt/* --exclude=*.tar.gz | xargs sed -i 's/node01/test01/g'
1.批量改名采用命令rename
rename 语法:
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
-v表示显示详细信息,-n表示不实际执行替换,只是看哪些文件会受影响。 -f 表示强制,不管是否有重名。
perlexpr是perl语法的表达式, files则是匹配项。因此,该命令执行结果与perlexpr有关,不一定就是改文件名。
实例: 将所有文件名*.html 改为对应的.htm
rename 's//.html$//.htm$/' *.html
去bak后缀
rename 's//.bak$//' *.bak
将文件名大写改为小写
rename 'y/A-Z/a-z/' *
但rename不能递归修改。
2.递归改名,用find+rename
将文件名的abc改为xyz
find . -name "abc*" -exec rename 's/abc/xyz/' {} /
该命令可以将当前目录下所有子目录的文件都改名。
3.内容替换,用find+sed
将所有ablo 替换为ablozhou
find . -type f -exec sed -i -e "s/ablo/ablozhou/g" {} /
sed 命令 -i 表示 --in-place,文件原地替换。-e 后跟替换表达式
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/'
*
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)