У меня есть полный файл хоста для распределенной системы сетевого мониторинга, который мне нужно разделить на два файла. Некоторые из хостов идут в одном файле, а остальные - в другом. Я использую sed
, чтобы вытащить хосты, которые мне нужны, но я не знаю, как поместить все остальное в другой файл, вроде как -v
для grep
.Выделить все, кроме блока текста
Пример хост-файла:
object Host "router" {
import "template"
display_name = "router"
address = "xx.xx.xx.xx "
}
object Host "switch" {
import "template"
display_name = "switch"
address = "xx.xx.xx.xx "
}
object Host "router" {
import "template"
display_name = "router"
address = "xx.xx.xx.xx "
}
object Host "otherthing" {
import "template"
display_name = "otherthing"
address = "xx.xx.xx.xx "
}
object Host "switch" {
import "template"
display_name = "switch"
address = "xx.xx.xx.xx "
}
object Host "otherthing" {
import "template"
display_name = "otherthing"
address = "xx.xx.xx.xx "
}
sed
команды я использую, чтобы вытащить из маршрутизаторов
sed '/router.*\n/p;//g;/{$/,/^}/H;//x;D' files/tmp/unsorted-host.tmp >> files/router.conf
Кроме того, я не знаю, если это будет более эффективно сортировки вместо для создания большого файла хоста, но вот как я делаю большой файл хоста:
while read line
do
# The SNMP to check the device type outputs on multiple lines, check to ensure we only grab IP's
getip=$(echo $line | awk '{print $1}')
if ping -c 1 $getip &> /dev/null
then
ip=$getip
else
trash=$getip
fi
template="template"
host_name=$(timeout -s KILL 2 /usr/bin/snmpwalk -v 2c -c community1 $ip 1.3.6.1.2.1.1.5.0 | awk '{print $NF}')
if [ -z "$host_name" ]
then
host_name=$(timeout -s KILL 2 /usr/bin/snmpwalk -v 2c -c community2 $ip 1.3.6.1.2.1.1.5.0 | awk '{print $NF}')
if [ -z "$host_name" ]
then
host_name=$(timeout -s KILL 2 /usr/bin/snmpwalk -v 2c -c community3 $ip 1.3.6.1.2.1.1.5.0 | awk '{print $NF}')
if [ -z "$host_name" ]
then
host_name=$(timeout -s KILL 2 /usr/bin/snmpwalk -v 2c -c community4 $ip 1.3.6.1.2.1.1.5.0 | awk '{print $NF}')
if [ -z "$host_name" ]
then
host_name=$(timeout -s KILL 2 /usr/bin/snmpwalk -v 2c -c community5 $ip 1.3.6.1.2.1.1.5.0 | awk '{print $NF}')
if [ -z "$host_name" ]
then
host_name=$(echo " Not found ")
fi
fi
fi
fi
fi
echo "
object Host $host_name {
import \"$template\"
display_name = $host_name
address = \"$ip \"
}"
done <files/tmp/hosts.tmp> files/tmp/unsorted-hosts.tmp
Целью было бы иметь два файла: один с маршрутизаторами и один со всем остальным. Спасибо заранее за любые советы!
Я не смотрел ваш оператор 'sed' подробно, но если вы можете найти все, что вам нужно, с помощью' sed', то вы не можете просто сделать ' sed', чтобы удалить материал маршрутизатора? – TTT