Ich habe Löschen datei.txt enthält:mehrere Zeilen oberhalb und unterhalb von einem Anpassungsmuster in einer Datei mit awk/sed/grep
registered
{
hostname-1
{
AAA 32;
BBB uuid-1;
ip 192.168.1.1;
host hostname-1;
...
...
...
}
}
registered
{
hostname-2
{
AAA 31;
BBB uuid-2;
ip 192.168.1.2;
host hostname-2;
...
...
...
}
}
registered
{
hostname-3
{
AAA 33;
BBB uuid-3;
ip 192.168.1.3;
host hostname-3;
...
...
...
}
}
Ich möchte auf passende ip einen vollständigen registrierten Block basiert löschen.
z. wenn IP 192.168.1.2, dann sollte der Ausgang sein:
registered
{
hostname-1
{
AAA 32;
BBB uuid-1;
ip 192.168.1.1;
host hostname-1;
...
...
...
}
}
registered
{
hostname-3
{
AAA 33;
BBB uuid-3;
ip 192.168.1.3;
host hostname-3;
...
...
...
}
}
I 2 Wege versucht, dies zu erreichen, aber konnte es nicht
1) Mit grep funktioniert: Das hat nicht funktioniert.
grep -v -B6 -A6 $IP file.txt > out.txt
mv -f out.txt file.txt
2) Mit awk: Wenn ich die genaue IP im awk Befehl geben unten dann funktioniert es
awk '/192.168.1.2/{for(x=NR-6;x<=NR+6;x++)d[x];}{a[NR]=$0}END{for(i=1;i<=NR;i++)if(!(i in d))print a[i]}' file.txt
Aber ich will die Variable $ IP im awk Befehl zu übergeben. Es funktioniert nicht
awk -v pattern="${IP}" '$0 ~ pattern/{for(x=NR-6;x<=NR+6;x++)d[x];}{a[NR]=$0}END{for(i=1;i<=NR;i++)if(!(i in d))print a[i]}' file.txt
Jede Hilfe, um das Problem hier herauszufinden, würde sehr geschätzt werden.
Danke.
das awk eins mit Variable hat einen Tippfehler ... das '/' sollte nicht da sein – Sundeep
Vielen Dank für den Hinweis auf das Problem. Ja, nach dem Entfernen der '/' hat es funktioniert. – user4060247