sed Problem / Frage

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Huck Fin
Beiträge: 1202
Registriert: 10.03.2008 17:10:30

sed Problem / Frage

Beitrag von Huck Fin » 15.12.2022 20:37:32

Moin,
folgendes funktioniert:

Code: Alles auswählen

IPfix=" 127.0.0.1\/8\ ::1 192.168.24.0\/24\ "
sed -i "s/\(ignoreip *= *\).*/\1$IPfix$IPn/" "$config_file"
aber ich wollte das aus einer Datei einlesen, in der etliche IPs mit Leerzeichen getrennt stehen.

Code: Alles auswählen

IPfix=`cat $PFAD/Liste5.txt`
sed -i "s/\(ignoreip *= *\).*/\1$line/" "$config_file"
meldet mir Fehler

sed: -e Ausdruck #1, Zeichen 55: Mehrere numerische Optionen am »s«-Befehl

Code: Alles auswählen

read line <$PFAD/Liste5.txt
echo $line
::1 127.0.0.1/8 192.168.24.0/24 192.168.24.5 
Die Liste ist etwas länger, aber das mal als Beispiel.
Jemand einen Tipp für mich wie der SED Befehl richtig lautet ?
Zuletzt geändert von Huck Fin am 15.12.2022 20:40:08, insgesamt 1-mal geändert.

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

Re: sed Problem / Frage

Beitrag von Meillo » 15.12.2022 20:40:07

Die Slashes muessten escaped werden. Einfacher ist es, du verwendest beim s-Kommando einen anderen Delimiter, der in der Datei nicht vorkommt.
Use ed once in a while!

Benutzeravatar
Huck Fin
Beiträge: 1202
Registriert: 10.03.2008 17:10:30

Re: sed Problem / Frage

Beitrag von Huck Fin » 15.12.2022 20:40:57

Das hatte ich am Anfang
Funktionierte aber auch nicht

Code: Alles auswählen

IPFIX=127.0.0.1\/8\ ::1 192.168.24.0\/24\ 
sed: -e Ausdruck #1, Zeichen 37: Unbekannte Option für »s«
Zuletzt geändert von Huck Fin am 15.12.2022 20:45:44, insgesamt 1-mal geändert.

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

Re: sed Problem / Frage

Beitrag von Meillo » 15.12.2022 20:42:53

Probier's nochmal. ;-)

Sonst poste den genauen Inhalt der Datei, den genauen Befehl, den du verwendet hast, und die genaue Fehlermeldung.
Use ed once in a while!

Benutzeravatar
Huck Fin
Beiträge: 1202
Registriert: 10.03.2008 17:10:30

Re: sed Problem / Frage

Beitrag von Huck Fin » 15.12.2022 20:49:41

Scheint zu laufen :THX:

Noch eine Frage...

Code: Alles auswählen

while read line
 do
 str2="$str2 $line"
 echo $str2 >Liste5.txt
done <Liste4.txt
löscht mir die Backslashes.
Ich nutze das, um aus einem Mehrzeiler einen Einzeiler zu machen.
Was kann ich da machen ?

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

Re: sed Problem / Frage

Beitrag von Meillo » 15.12.2022 21:01:25

Huck Fin hat geschrieben: ↑ zum Beitrag ↑
15.12.2022 20:49:41
Scheint zu laufen :THX:
Poste bitte nochmal, wie genau du es nun machst, fuer diejenigen, die diesen Thread in Zukunft finden, weil sie ein aehnliches Problem haben. Danke.

Huck Fin hat geschrieben: ↑ zum Beitrag ↑
15.12.2022 20:49:41
Noch eine Frage...
Ich habe eine Textdatei "Liste0.txt"
Inhalt:

Code: Alles auswählen

 127.0.0.1\/8\
::1
192.168.24.0\/24\
Wenn ich die mit cat in eine andere Datei schicke, sind die Backslashes weg.
*Wie* schickst du die in die andere Datei? Cat veraendert keine Inhalte, aber die Shell womoeglich schon, je nachdem wie du es eben machst und wie du quotest. Leider hat unser Admin immer noch keine Kristallkugeln fuer uns Mods beschafft ... aber wenn ihr alle ganz viel spendet, dann wird das vielleicht noch mal was. ;-)
Use ed once in a while!

Benutzeravatar
Huck Fin
Beiträge: 1202
Registriert: 10.03.2008 17:10:30

Re: sed Problem / Frage

Beitrag von Huck Fin » 15.12.2022 21:18:10

Hi,
das ist nicht vom cat sondern war vom while read line.
Habe es oben korregiert.

Code: Alles auswählen

while read -r line  
ist die Lösung.

Hintergrund zum Script:
Ich will Fail2ban mehrere IPs whitelisten.

zum einen feste IPs, zum anderen von mehreren dyndns Adressen und ich habe ne Mailadresse whitelist@mydomain
Soweit läuft es gut, nur mit den Backslashes...
Alle IPs stehen untereinander in mehreren Dateien.

Mit dem read -r konnte ich das eine Problem lösen.
in Liste5.txt sind alle IPs mit Backslash und slash so wie gewollt.

Code: Alles auswählen

#!/bin/bash
PFAD=/bin2/00whitelist
dir1=$PFAD

echo "Listen (0,1,2) zu einer Liste machen (Liste4.txt)"
cat Liste0.txt Liste1.txt Liste2.txt Liste6.txt>>Liste3.txt
cat Liste3.txt |uniq >>Liste4.txt

# Einzeiler erstellen
while read -r line
 do
 str2="$str2 $line"
 echo $str2 >Liste5.txt
done <Liste4.txt
echo "Ergebnis = Liste5.txt"
/etc/jail.local

Code: Alles auswählen

ignoreip =127.0.0.1/8 ::1 192.168.24.0/24 1.118.22.123 1.9.181.123 192.168.24.5 1.85.128.123 1.85.222.123 1.227.126.123 1.247.246.123 1.114.252.123 1.246.147.123 1.244.208.123 1.204.218.123 1.208.25.123 1.246.147.123
Ich habe die erste (1) und letzte Zahl (123) mal verändert, aber so in etwa ist mein Ergebnis

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

Re: sed Problem / Frage

Beitrag von Meillo » 15.12.2022 21:29:46

Es waere gut, wenn du alle Variablenexpansionen mit doppelten Anfuehrungsstrichen quotest. Das erspart dir generell einige Probleme.


Diese Schleife um die Inhalte auf eine Zeile zu bekommen, kannst du auch einfacher haben:

Code: Alles auswählen

xargs <Liste4.txt >Liste5.txt
;-)
Use ed once in a while!

Benutzeravatar
Huck Fin
Beiträge: 1202
Registriert: 10.03.2008 17:10:30

Re: sed Problem / Frage

Beitrag von Huck Fin » 15.12.2022 21:38:19

Habe ich mal getestet.

Code: Alles auswählen

xargs <Liste4.txt >Liste5.txt
Da verschwinden die Backslashes auch.

Aber den xargs kannte ich noch nicht.
Danke dir... :THX:

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

Re: sed Problem / Frage

Beitrag von Meillo » 15.12.2022 21:41:49

Was fuer Backslashes hast du darin denn? Ich dachte, du loest das nun mit einem anderen Delimiter beim s-Kommando (was alles einfacher macht). Oder verwechsle ich hier was?
Use ed once in a while!

Benutzeravatar
Huck Fin
Beiträge: 1202
Registriert: 10.03.2008 17:10:30

Re: sed Problem / Frage

Beitrag von Huck Fin » 15.12.2022 21:43:50

Aus Liste0.txt + Liste1.txt ...
(Quelle)

Code: Alles auswählen

 127.0.0.1\/8\
::1
192.168.24.0\/24\
soll ein Einzeiler (Liste5.txt) werden (mit Backslashes) für /etc/fail2ban/jail.local

(Code)

Code: Alles auswählen

config_file=/etc/fail2ban/jail.local
IPfix=`cat $PFAD/Liste5.txt`
sed -i "s/\(ignoreip *= *\).*/\1$IPfix/" "$config_file"
(Ziel)

Code: Alles auswählen

ignoreip =127.0.0.1/8 ::1 192.168.24.0/24 

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

Re: sed Problem / Frage

Beitrag von Meillo » 15.12.2022 22:14:11

Lass die Backslashes weg und verwende dann:

Code: Alles auswählen

sed -i "s_\(ignoreip *= *\).*_\1$IPfix_" "$config_file"
Und alles ist gut. ;-)
Use ed once in a while!

Benutzeravatar
Huck Fin
Beiträge: 1202
Registriert: 10.03.2008 17:10:30

Re: sed Problem / Frage

Beitrag von Huck Fin » 15.12.2022 22:24:07

Mach ich nach Änderung der Jail.local ein
fail2ban-client reload
oder ein
fail2ban-server reload
oder ein
service fail2ban reload ???

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

Re: sed Problem / Frage

Beitrag von Meillo » 15.12.2022 22:46:26

Keine Ahnung. Da solltest du im Web recherchieren oder die Doku konsultieren.
Use ed once in a while!

Antworten