LINUX.ORG.RU

Сообщения Scaurus

 

#!bin/Bash, awk , поиск и замена строки в файле .

Форум — General

Здравствуйте! Недавно начал учится писать скипты и не всё ещё получается, прошу помочь с проблемой.

Необходимо в файле найти и заменить строку в определённом блоке файла. Файл разделён на блоки.Пример файла :

[1]
rule= 1 ip icmp all la la la la
[2]
rule= 1 ip icmp all la la la la
rule= 2 vpn to all la la la la
[3]
rule= 1 ftp ip vpn la la la la
, необходимо по заданному блоку 1, 2 или 3 найти строку и заменить её на другую.

Входящими параметрами получается будет: путь файлы для редактирования блок в котором надо изменить старая строка новая строка.

написал не до конца скрипт, дальше не смог :((

#!/bin/bash

#param1 = /etc/user/f.conf
#param2 = editing block  [example]: 1
#param3 = newRule  [exaple]: rule= num 2 icmp from ip 
#param4 = oldRule  [exaple]: rule= num 3 icmp from ip to 


Filelocation=$1
shift
Block=$1
shift
newRule=$1
shift
oldRule=$@

error_exit() {
	echo $@
	exit 1
	return 1
}

backup_orig_file() {
	backup_dir=`echo "/backup/orig_file"`
	mkdir -p $backup_dir || error_exit "Directory $backup_dir not created"
	cp $1 $backup_dir
	return 0
}

insert_line() {
	Filelocation=$1
	shift
	Block=$1
	shift
	newRule=$1
	shift
	oldRule=$@		
	
	Block_line_num=`cat $Filelocation | grep -n $Block | cut -d ":" -f 1`

	old_line_num=`cat $Filelocation | grep -n $oldRule | cut -d ":" -f 1`

###############################	
	if [old_line_num>Block_line_nem && мы не дошли до след. блока "[" или не дошли до eof  ];then
	
	на место old_lline_num вставить newRule
	
###############################
	else
		if [ old_line_num!= 0 ]; then
			
		else
			echo "Rule not found in the Block :---- $Block -----"
		fi	
	fi
	ruturn 0
	}

if [ -e $Filelocation ]; then
	echo "File exist"
else
	echo "File $FILE_NAME not exist"
	exit 1
fi

case "$Block" in
	1) echo "1 selected";shift;;
	2) echo "2 selected";shift;;
	3) echo "3 selected";shift;;
	4) echo "4 selected";shift;;
	5) echo "5 selected";shift;;
	6) echo "6 selected";shift;;
	7) echo "7 selected";shift;;
	*) echo "Selection not recognized"; exit 1;;
esac

backup_orig_file $Filelocation

insert_line $Filelocation $Block $newRule $oldRule

exit 0

 , , , ,

Scaurus
()

RSS подписка на новые темы