shell脚本常用

本文详细介绍如何使用SED命令进行递归查询指定目录下含特定字符的文件,并演示如何删除或替换这些文件中的目标字符串。此外,还讲解了SED命令中变量的正确引用方式以及如何巧妙处理换行符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 ,递归查询指定目录下(包含其子目录)含有某字符的所有文件,并且删除所有文件该字符串所在行:

sed -i '/"字符串"/d' `grep "字符串" -rl 指定目录`

-r   递归查找

-l 输出找的文件名

例:

sed -i '/"YXQ3Mahe-5H-R1Z"/d' `grep "YXQ3Mahe-5H-R1Z_" -rl ./`  

sed -i '/"Password" : "none"/d' `grep ' "Password" : "none" ' -rl ./`

./ 表示当前目录,会查询当前目下以及子目录的所有文件

2,递归查询指定目录下(包含其子目录)含有某字符的所有文件,并且替换所有文件的该字符串为新字符串:

sed -i 's/原字符串/新字符串/g' `grep "原字符串" -rl 指定目录`

例:

sed -i 's/"Password" : "none"/"newstring"/g' `grep ' "Password" : "none" ' -rl ./`

sed里面需要用变量,要用双引号。

sed命令使用双引号的情况下,可以使用$var(变量)直接引用:

echo | sed "s/^/$RANDOM.rmvb_/g"

 

sed命令使用单引号的情况下,可以使用'"$var"'引用(单引号,然后双引号,变量):

echo | sed 's/^/'"$RANDOM"'.rmvb_/g'

 

3.sed 匹配\n换行符

假设 str="a,b,c,d"

echo ${str} | sed "s/,/\n/g"

输出:

a

b

c

d

echo ${str} | sed "s/,/\n/g" | sed  "s/\n/,/g"

输出:

a

b

c

d

没有匹配到\n换行符

这是因为sed 模式是以\n换行符作为行的结束标记的。它没有办法匹配到\n再替换

解决方法:

echo ${str} | sed "s/,/\n/g" | sed  "s/\n/,/g" | sed ":label;N;s/\n/,/;b label"

输出:

a,b,c,d

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半岛铁盒.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值