[gelöst] Conf Datei Zeile mit sed tauschen

Bash, Shell, PHP, Python, Perl, CGI
tsaenger
Posts: 426
Joined: 2003-08-13 01:14

[gelöst] Conf Datei Zeile mit sed tauschen

Post 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
Last edited by tsaenger on 2013-06-21 16:18, edited 1 time in total.
tsaenger
Posts: 426
Joined: 2003-08-13 01:14

Re: Conf Datei Zeile mit sed tauschen

Post by tsaenger »

ICh denke ich habe es gefunden:
sed "s/LocalIdentifier:.*/LocalIdentifier:\"Text\"/" -i capi4hylafax.conf

.* hatte gefehlt.

Gruß

Tobias
User avatar
Joe User
Project Manager
Project Manager
Posts: 11174
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Conf Datei Zeile mit sed tauschen

Post 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).
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
tsaenger
Posts: 426
Joined: 2003-08-13 01:14

Re: Conf Datei Zeile mit sed tauschen

Post by tsaenger »

Danke!