shell 判断文件内容是否包含几行配置信息?如果没有,在指定行下添加内容

举例 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追问

可以一起找么,我就是嫌一个个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
可以的, 使用正则来实现。发下私信过来

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网