[gelöst] debian bash script suchen ersetzen Problem

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
joe2017
Beiträge: 1274
Registriert: 07.08.2017 14:29:51

[gelöst] debian bash script suchen ersetzen Problem

Beitrag von joe2017 » 04.03.2022 12:29:15

Hallo zusammen,

ich habe ein kleines Probem mit einem Script. Ich möchte eine Zeile in einer Datei bearbeiten welche mehrmals vorkommt. Ich möchte jedoch nur eine bestimmte Zeile bearbeiten.

Es handelt sich um die /etc/nftables.conf Datei.

Code: Alles auswählen

chain input {
    type filter hook input priority 0; policy drop;
    ct state related, established accept
}
chain forward {
    type filter hook forward priority 0; policy drop;
}
chain output {
    type filter hook output priority 0; policy drop;
    ct state related, established accept
}
Hier habe ich die Zeile "ct state related, established accept" unter chain input und output stehen. Unter Output möchte ich diese bearbeiten und habe folgendes versucht.

Code: Alles auswählen

if ! grep 'ct state related accept' /etc/nftables.conf; then
      sudo sed -i 's/type filter hook output priority 0; policy drop;\n            ct state related, established accept/type filter hook output priority 0; policy drop;\n            ct state related accept/g' /etc/nftables.conf;
    fi
Leider funktioniert das nicht. Hat jemand ein Tipp wie man das anstellt.
Zuletzt geändert von joe2017 am 07.03.2022 07:47:12, insgesamt 2-mal geändert.

Benutzeravatar
Meillo
Moderator
Beiträge: 9224
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: debian bash script suchen ersetzen Problem

Beitrag von Meillo » 04.03.2022 14:11:16

Ohne mich jetzt genauer inhaltlich mit den Daten auszukennen ... Du kannst in sed Befehle auf Bereiche einschraenken, z.B. so:

Code: Alles auswählen

/^chain output {$/,/^}$/ s/foo/bar
Das macht die Ersetzung nur in dem chain output Block (solange deine Inputdatei ordentlich formatiert ist).
Use ed once in a while!

Benutzeravatar
joe2017
Beiträge: 1274
Registriert: 07.08.2017 14:29:51

Re: debian bash script suchen ersetzen Problem

Beitrag von joe2017 » 04.03.2022 14:54:50

Mit deinem Befehl bekomme ich folgende Rückmeldung:

Code: Alles auswählen

/^chain: Befehl nicht gefunden

Huo
Beiträge: 778
Registriert: 26.11.2017 14:03:31
Wohnort: Freiburg

Re: debian bash script suchen ersetzen Problem

Beitrag von Huo » 04.03.2022 15:29:17

Für Dein Beispiel umgesetzt funktioniert Meillos Ansatz in etwa so:

Code: Alles auswählen

sed '/^chain output {$/,/^}$/ s/related, established accept/related accept/g' /etc/nftables.conf

Benutzeravatar
joe2017
Beiträge: 1274
Registriert: 07.08.2017 14:29:51

Re: debian bash script suchen ersetzen Problem

Beitrag von joe2017 » 07.03.2022 07:20:00

Guten Morgen und Danke für die Info.

Das hat leider nicht funnktioniert. Kann es sein weil der Inhalt noch in einem "table ip filter { }" steht?

Code: Alles auswählen

table ip filter {
	chain input {
		type filter hook input priority 0; policy drop;
		ct state related, established accept
	}
	chain forward {
		type filter hook forward priority 0; policy drop;
	}
	chain output {
		type filter hook output priority 0; policy drop;
		ct state related, established accept
	}
}
Sorry das hab ich übersehen!

Nein ich hab das Ganze in einer neuen Datei getestet. Auch hier ging es nicht. Es muss wohl an der Syntax liegen?

Benutzeravatar
joe2017
Beiträge: 1274
Registriert: 07.08.2017 14:29:51

Re: debian bash script suchen ersetzen Problem

Beitrag von joe2017 » 07.03.2022 07:45:45

Ich hab das Problem gefunden. Die Syntax ist richtig, jedoch ist in meiner Datei ein Tab vor dem chain output. Das muss natürlich mit rein.

Code: Alles auswählen

sed '/^"hier muss der Tab noch dazu"chain output {$/,/^}$/ s/related, established accept/related accept/g' /etc/nftables.conf
Vielen Dank!

Benutzeravatar
Meillo
Moderator
Beiträge: 9224
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: debian bash script suchen ersetzen Problem

Beitrag von Meillo » 07.03.2022 08:09:35

joe2017 hat geschrieben: ↑ zum Beitrag ↑
07.03.2022 07:45:45
Ich hab das Problem gefunden. Die Syntax ist richtig, jedoch ist in meiner Datei ein Tab vor dem chain output. Das muss natürlich mit rein.

Code: Alles auswählen

sed '/^"hier muss der Tab noch dazu"chain output {$/,/^}$/ s/related, established accept/related accept/g' /etc/nftables.conf
Genau!

Du kannst \t schreiben (zwischen ^ und chain), das steht fuer einen Tab.
Use ed once in a while!

Antworten