本脚本用于删除ini格式中某段section的配置。原理是通过计算section所在的开始行号和结束行号,然后传给sed命令,直接删除
onecloud:~:# cat replace.sh
## 作用:删除ini中某一section的配置
##
section="tobedeleted"
#获取当前配置起始行号
declare -i LN
LN=$( cat smb.conf | grep -n "\["${section}"\]" | cut -d: -f1 )
echo "$LN"
#发现已有配置,希删除
if [ $LN -gt 0 ];then
#计算距离下一条配置相差的行数
declare -i DIFFNUM
DIFFNUN=$( sed -n "$(( $LN + 1 )),$ p" smb.conf | grep -n "\[.*\]" | cut -d: -f1 | head -n 1 )
if [ $DIFFNUM -gt 0 ];then
#将要删除的截止行数
declare -i NEXTLN
NEXTLN=$(( $LN + $DIFFNUM - 1 ))
echo $NEXTLN
#删除当前配置
sed "$LN,$NEXTLN d" smb.conf
else
#应该是最后一段section,直接删到行尾
echo "行尾"
sed "$LN,$ d" smb.conf
fi
fi
#如果要在删除后,要原有位置插入新的配置,可以这么写:
sed '${NEXTLN}i two lines \
to be inserted!
' smb.conf