Page 1 of 1

[gelöst] Conf Datei Zeile mit sed tauschen

Posted: 2013-06-21 09:32
by tsaenger
Hallo zusammen,

ich suche nach einer Möglichkeit wie ich mit sed aus einer Conf-Datei eine komplette Zeile austauschen kann.
Nehmen wir an die Conf-File sieht so aus:

Code: Select all

    HylafaxDeviceName:          faxCAPI
    RecvFileMode:               0600
    FAXNumber:                  +49.0000.0000
    LocalIdentifier:          "CAPI4HylaFAX"
    MaxConcurrentRecvs:         2
    OutgoingController:         1
    OutgoingMSN:55
    SuppressMSN:                0
    NumberPrefix:
    UseISDNFaxService:          0
Nun will ich erreichen, das ich in der Conf-Datei die komplette Zeile " LocalIdentifier:" gegen eine neue Zeile austausche.
Mit SED kann ich bestimmte Strings austauschen:

Code: Select all

sed "s/LocalIdentifier:/LocalIdentifier:\"Text\"/" -i capi4hylafax.conf
Hier wird aber nur der String "LocalIdentifier:" ersetzt. Jetzt war meine idee den sed-Befehlt mit einem cat zu kombinieren.
Zuerst suche mit cat den String, dann ersetzte ihn mit sed.

Leider bekomme ich die Kombination nicht hin.
Wer kann mir von euch bitte helfen.

Danke

Tobias

Re: Conf Datei Zeile mit sed tauschen

Posted: 2013-06-21 09:54
by tsaenger
ICh denke ich habe es gefunden:
sed "s/LocalIdentifier:.*/LocalIdentifier:\"Text\"/" -i capi4hylafax.conf

.* hatte gefehlt.

Gruß

Tobias

Re: Conf Datei Zeile mit sed tauschen

Posted: 2013-06-21 12:43
by Joe User
Etwas eleganter:

Code: Select all

sed -e 's#^\(LocalIdentifier:[[:space:]]*\).*$#\1"NewText"#' -i capi4hylafax.conf
Der Bereich zwischen \( und \) wird bei \1 wieder eingefügt, praktisch bei längeren Konstrukten.
^ und $ symbolisieren jeweils den Zeilenanfang beziehungsweise das Zeilenende, hilft um ungewollte Ersetzungen zum Beispiel in Kommentaren zu vermeiden.
[[:space:]] umfasst Leerzeichen und Tabulatoren, so bleiben Dir auch diese erhalten und vermeidet Syntaxfehler.
Durch die Verwendung von Hochkomma (') kannst Du Dir das Escapen der "Anführungszeichen" (") sparen.

Die # nutze ich lieber als Trennzeichen, erspart mir das Escapen etwaiger / in den Konstrukten (ist aber nur meine persönliche Vorliebe).

Re: Conf Datei Zeile mit sed tauschen

Posted: 2013-06-21 16:17
by tsaenger
Danke!