举例 my.cnf
查找文件是否包含如下内容:
A=1
B='C'
D=abcd
如果没有找到上述内容,则在[mysqld]行下添加上述内容
新手求大神赐教
第1个回答 2014-01-13
假设你是一个个string找,然后没找到就添加:
#!/bin/sh
if grep -Fxq "A=1" my.cnf
then
echo "A=1 found"
else
sed -i '/\[mysqld\]/a A=1' my.cnf
fi
if grep -Fxq "B=‘C’" my.cnf
then
echo "B=‘C’ found"
else
sed -i '/\[mysqld\]/a B=‘C’' my.cnf
fi
if grep -Fxq "D=abcd" my.cnf
then
echo "D=abcd found"
else
sed -i '/\[mysqld\]/a D=abcd' my.cnf
fi追问
#!/bin/sh
if grep -Fxq "A=1" my.cnf
then
echo "A=1 found"
else
sed -i '/\[mysqld\]/a A=1' my.cnf
fi
if grep -Fxq "B=‘C’" my.cnf
then
echo "B=‘C’ found"
else
sed -i '/\[mysqld\]/a B=‘C’' my.cnf
fi
if grep -Fxq "D=abcd" my.cnf
then
echo "D=abcd found"
else
sed -i '/\[mysqld\]/a D=abcd' my.cnf
fi追问
可以一起找么,我就是嫌一个个STRING太麻烦
追答所谓的一起找,那就是三个都找到,才满足条件
你的要求如果是找一个加一个,就是这么做
如果是都找不到才加,那就是一起找,例子:
#!/bin/sh
t=0
while read -r line; do
case $line in
*"A=1"*)
t=$(expr $t + 1);;
*"B='C'"*)
t=$(expr $t + 1);;
*"D=abcd"*)
t=$(expr $t + 1);;
esac
done < my.cnf
if [ $t -eq 3 ] ; then
sed -i '/\[mysqld\]/a 你要加的行' my.cnf
fi
第2个回答 2014-01-13
可以的, 使用正则来实现。发下私信过来