(gelöst) Suchen und ersetzen mit sed und [0-9]

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
medias
Beiträge: 90
Registriert: 18.05.2014 11:21:43

(gelöst) Suchen und ersetzen mit sed und [0-9]

Beitrag von medias » 04.05.2017 17:32:31

Ich möchte 9Punkt (kann auch eine Zahl zwischen 0 und 9 Sein) mit 9TAB ersetzen Wenn ich im Feld suchen [0-9] eingebe, was muss ich im Feld ersetzen eingeben?

Diese Eingabe

Code: Alles auswählen

sed  's/[0-9]./[0-9]\t/g'
ergibt diese Ausgabe

[0-9]\t
Zuletzt geändert von medias am 04.05.2017 18:48:48, insgesamt 1-mal geändert.

Benutzeravatar
TRex
Moderator
Beiträge: 8318
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: Suchen und ersetzen mit sed und [0-9]

Beitrag von TRex » 04.05.2017 17:46:11

Code: Alles auswählen

$ echo "Kekswettessen 4. Platz" | sed 's/\([0-9]\)\./\1\t/'
Kekswettessen 4  Platz
Du nimmst [0-9] in eine Gruppe (mit den Klammern, die du hier escapen musst) und kannst dann mit \1 darauf zugreifen. Soll es wirklich nur ein Punkt sein, dann musst du den wie bei mir auch escapen, sonst matcht der auf alle Zeichen.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

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

Re: Suchen und ersetzen mit sed und [0-9]

Beitrag von Meillo » 04.05.2017 17:56:55

TRex hat geschrieben:

Code: Alles auswählen

$ echo "Kekswettessen 4. Platz" | sed 's/\([0-9]\)\./\1\t/'
Kekswettessen 4  Platz
Du nimmst [0-9] in eine Gruppe (mit den Klammern, die du hier escapen musst) und kannst dann mit \1 darauf zugreifen. Soll es wirklich nur ein Punkt sein, dann musst du den wie bei mir auch escapen, sonst matcht der auf alle Zeichen.
Dem ist nichts hinzuzufuegen.

(... ausser, dass das Newline-Zeichen beim Punkt nicht zu ``alle Zeichen'' gehoert. ;-) )
Use ed once in a while!

medias
Beiträge: 90
Registriert: 18.05.2014 11:21:43

Re: Suchen und ersetzen mit sed und [0-9]

Beitrag von medias » 04.05.2017 18:48:25

Danke für die schnelle Hilfe! :THX:

Benutzeravatar
hikaru
Moderator
Beiträge: 13901
Registriert: 09.04.2008 12:48:59

Re: (gelöst) Suchen und ersetzen mit sed und [0-9]

Beitrag von hikaru » 04.05.2017 19:21:03

Meillo hat geschrieben:Dem ist nichts hinzuzufuegen.

(... ausser, dass das Newline-Zeichen beim Punkt nicht zu ``alle Zeichen'' gehoert. ;-) )
...und dass man aus rein kosmetischen Gründen vielleicht den Slash als Mustertrenner in der Regex austauschen könnte*:

Code: Alles auswählen

sed 's#\([0-9]\)\.#\1\t#'
*) Ich finde Wälder von Slashes und Backslashes immer etwas unübersichtlich.
\\/\///\/\\ ... \o/

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

Re: (gelöst) Suchen und ersetzen mit sed und [0-9]

Beitrag von Meillo » 04.05.2017 20:23:48

Ach ja, und sed kennt eigentlich kein `\t', jedenfalls kann man nicht davon ausgehen, dass jedes sed das versteht:
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html hat geschrieben: The meaning of an unescaped <backslash> immediately followed by any character other than '&', <backslash>, a digit, <newline>, or the delimiter character used for this command, is unspecified.
Man muss den Tab literal eingeben, wenn es portabel sein soll.

... aber das interessiert ja eh keinen. :roll:
Use ed once in a while!

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

Re: (gelöst) Suchen und ersetzen mit sed und [0-9]

Beitrag von Meillo » 04.05.2017 20:27:19

hikaru hat geschrieben: ...und dass man aus rein kosmetischen Gründen vielleicht den Slash als Mustertrenner in der Regex austauschen könnte*:

Code: Alles auswählen

sed 's#\([0-9]\)\.#\1\t#'
Ich habe frueher auch `#' verwendet, tue das aber heute nicht mehr, weil ich finde, dass das Doppenkreuz durch seinen hohen Schwarzwert eher verbindet als trennt. Unterstriche finde ich da optisch trennender. Normalerweise verwende ich aber Kommas, weil die (auf der deutschen Tastatur) am einfachsten zu tippen sind, selten in Such- und Ersatztext vorkommen und in normalem Text auch trennende Bedeutung haben.
Use ed once in a while!

Benutzeravatar
hikaru
Moderator
Beiträge: 13901
Registriert: 09.04.2008 12:48:59

Re: (gelöst) Suchen und ersetzen mit sed und [0-9]

Beitrag von hikaru » 04.05.2017 20:43:45

Meillo hat geschrieben:Ach ja, und sed kennt eigentlich kein `\t', jedenfalls kann man nicht davon ausgehen, dass jedes sed das versteht:
[..]
... aber das interessiert ja eh keinen. :roll:
Mich schon. Es ist für mich wenig praxisrelevant, da ich praktisch nur auf GNU-Systemen unterwegs bin, aber ich finde es durchaus interessant zu erfahren, wo ich mich durch Nutzung unportabler Konstrukte unbemerkt einsperre.
Meillo hat geschrieben:Ich habe frueher auch `#' verwendet, tue das aber heute nicht mehr, weil ich finde, dass das Doppenkreuz durch seinen hohen Schwarzwert eher verbindet als trennt.
Mit "Schwarzwert" meinst du das hohe Figur/Grund-Verhältnis (nicht alle meine Terminals verwenden schwarze Schrift)?
Ich finde es genau aus dem Grund geeignet, denn dadurch springt es beim optischen Parsen von Code gleich ins Auge, was es mir erleichtert es beim Analysieren des Patterns zu ignorieren. Außerdem kommt es in Quellcode praktisch nur in Kommentaren vor, die selten relevante Regex enthalten (seltener als Unterstriche oder Kommas).

Edit:
Unabhängig davon, welchen alternativen Mustertrenner man verwendet, sich des Umstands bewusst zu sein, dass man einen benutzen kann ist allein schon hilfreich. Damit kann man es sich im Vergleich zu Slashes als Trenner nämlich ersparen, Slashes im Muster zu escapen. Und das trägt mMn sehr zur Übersichtlichkeit bei.

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

Re: (gelöst) Suchen und ersetzen mit sed und [0-9]

Beitrag von Meillo » 04.05.2017 21:21:43

hikaru hat geschrieben:
Meillo hat geschrieben:Ich habe frueher auch `#' verwendet, tue das aber heute nicht mehr, weil ich finde, dass das Doppenkreuz durch seinen hohen Schwarzwert eher verbindet als trennt.
Mit "Schwarzwert" meinst du das hohe Figur/Grund-Verhältnis (nicht alle meine Terminals verwenden schwarze Schrift)?
Ja, das meine ich. Eigentlich haette ich ``Grauwert'' schreiben muessen, so nennt man das in der Typographie.

(Der Schwarzwert war bloss symbolisch, weil alle meine Terminals sind helle Schrift auf dunklem Grund ... ausser beim Vortraegen mit Beamer, weil man da schwarz auf weiss einfach besser lesen kann.)

Edit:
Unabhängig davon, welchen alternativen Mustertrenner man verwendet, sich des Umstands bewusst zu sein, dass man einen benutzen kann ist allein schon hilfreich. Damit kann man es sich im Vergleich zu Slashes als Trenner nämlich ersparen, Slashes im Muster zu escapen. Und das trägt mMn sehr zur Übersichtlichkeit bei.
Deinem Edit stimme ich voll zu. Genau darum geht es.
Use ed once in a while!

Antworten