linux下批量查询文件内容字符串并替换

linux下批量查询文件内容字符串并替换,第1张

查找批量替换文件时,去除某种类型的文件,下面表示在./salt/*下的所有文件中,不包括tar.gz结尾的文件,搜索包含有node01字符串的文件

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/'

*


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8623774.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-19
下一篇2023-04-19

发表评论

登录后才能评论

评论列表(0条)

    保存