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'

遍历啥意思,获取啥意思,就是全弄走么,

这个可以find 和tar组合,都提取的话,tar -czvf 备份.tgz 要提取的文件,

要只找几个文件,可以先find,然后加入打包,注意压缩的话就不能追加入包了。

find 位置 找啥 --exec tar -rvf 备份.tar {} \

先以a.txt为例:

awk -v RS="" '{ 

n = split($0,a,"《[^》]+》")

for(i=2i<ni+=2)

    print "《keywords》"a[i]"《/keywords》" 

}' a.txt >>./newfile/a.txt

这样就行了。

为了可读性,我将一条awk语句写成了多行。

实际测试结果如下:

解说:

RS=""

将awk的记录分隔符设置为空(默认是换行符),即将整个a.txt文本看做一条记录。

n = split($0,a,"《[^》]+》")

以正则"《[^》]+》"匹配的内容作为分隔符,对文本内容进行分割并将分割结果存入数组a,分割出的数目(数组大小)即为split函数的返回值n。这里暂且不对该正则做过多解释,否则喧宾夺主,有需要请追问,我再补充。

for(i=2i<ni+=2)

    print "《keywords》"a[i]"《/keywords》"

打印数组下标为偶数的元素并在首尾分别加上关键字标记以还原。数组下标从1开始。

其他文件可作相同处理。如果文件较多,你可以搞个循环去做。这个应该不难。


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

原文地址: http://outofmemory.cn/yw/7528263.html

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

发表评论

登录后才能评论

评论列表(0条)

保存