shell脚本 - 删除某个字符串的前几行、后几行

1、删除匹配字符串的前两行,后一行,可以同时删除多个,循环删除

# 需要删除的字符串数组
deleteArray=("address 192.168.1.12" "address 192.168.1.102" "address 192.168.5.100" "address 192.168.3.201" "address 192.168.6.99" "address 192.168.1.102" "address 192.168.3.88" "address 192.168.5.99")
for value in "${deleteArray[@]}"
do
    echo "start to delete \"$value\""
    while true
    do
        # ./interfaces 目标文件
        line=$(grep -nE "^$value" ./interfaces | head -1| awk -F ":" '{print$1}') # 目标字符串行号
        [ -z "$line" ]&&break # 如果为空,则表示文件中没有该字符串,结束本次循环,继续删除deleteArray 中的下一个字符串
        line_start=$((line-2)) # 要删除的起始行
        line_end=$((line+1)) #要删除的结束行
        echo "delete line:$line_start - $line_end"
        # ./interfaces 目标文件
        sed -i "$line_start,$line_end d" ./interfaces
    done
done

2、删除某个字符串的前几行、后几行,比较灵活

deleteArray(){
    
    
	value=$1
	filename=$4
	front=$2
	back=$3
	
	line=$(grep -nE "$value" $filename | head -1| awk -F ":" '{print$1}') # 目标字符串行号
	line_start=$((line-$front)) # 要删除的起始行
	line_end=$((line+$back)) #要删除的结束行
	echo "delete line:$line_start - $line_end"

	sed -i "$line_start,$line_end d" $filename
  }

#参数1:要删除的字符串  参数2:前几行  参数3:后几行  参数4:文件名
deleteArray "address 192.168.21.222"  2 2 ./interfaces

猜你喜欢

转载自blog.csdn.net/weixin_44618297/article/details/131146342