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'
假设 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