Zeichen zwischen Zeichenfolge anzeigen lassen

I

Ivi

Jungspund
Hallo,

ist es mit sed oder einem anderen Programm möglich sich die Zeilen die zwischen einer speziellen Zeichenfolge liegen anzuzeigen? Angenommen in einem Dateinamen oder in einer Textzeile steht

Code:
{{zu-suchende-zeichenkette}}

dann soll alles zwischen '{{’ und ’}}’ angezeigt werden. Die Klammern fungieren hier sozusagen als Separator zum sonstigen Text.

Ivi
 
ja geht mit grep...

Code:
grep -Po '(?<={{).*(?=}})'

Womit Du Dich beschäftigen kannst, um das zu lernen:
  • man grep
  • Reguläre Ausdrücke
Das RegEx-Feature nennt sich Lookahead/Lookbehind. Das ist eine "Zusicherung", das etwas davor bzw. danach kommen muss.

Warnung aus der Manpage von grep dazu
-P, --perl-regexp
Interpretiert das Muster als einen regulären Perl-Ausdruck (PCRE). Diese Option ist höchst experimentell. Es kann vorkommen, dass grep -P wegen nicht implementierter Funktionalitäten warnt.

Code:
echo "Ich bin ein {{gruener}} Nasenbaer" | grep -Po '(?<={{).*(?=}})'

--> Ausgabe:

gruener
 
Geht mit sed genauso:
Code:
echo "Ich bin ein {{gruener}} Nasenbaer." | sed 's/.*{{\(.*\)}}.*/\1/g'
;)
Viele Grüße,
Pik-9
 
ja geht mit grep...
Das RegEx-Feature nennt sich Lookahead/Lookbehind. Das ist eine "Zusicherung", das etwas davor bzw. danach kommen muss.
Lookahead/behind ist hier überflüssig, PerlRegexp auch, dafür reichen Extended RegExp völlig aus.
 
Stehe vor einem ähnlichem Problem was ich mit den Beispielen oben bisher nicht lösen kann. Ich möchte die Inhalte rausfiltern, wenn mehrere {inhalt1},{inhalt2} vorhanden ist,

Beispiel:

echo 'Task=6,"hallo" ->"hallo welt {inhalt}, {inhalt2} or {inhalt3}?", setbla(1,1), Task=7' | grep -oP '(?<={).*(?=})'

inhalt}, {inhalt2} or {inhalt3

bitte einen Tipp, wie ich die Drei Werte rausfiltern kann, wenn Sie in einer Zeile hintereinander bzw. mehrfach vorhanden sind?
 
Hilft dir
Code:
echo 'Task=6,"hallo" ->"hallo welt {inhalt}, {inhalt2} or {inhalt3}?", setbla(1,1), Task=7' | grep -o "{.*}"
weiter?
Wenn nicht, musst du nochmal genau sagen, in welchem Format du die Daten brauchst und ggf. weiter filtern.

Viele Grüße,
Pik-9
 
Hi Pik-9

danke schon mal, aber zum besseren Verständnis kurz mal der Inhalt der Datei:

Code:
Zeile1 Task=6,"hallo" ->"hallo welt {inhalt}, {inhalt2} or {inhalt3}?", setbla(1,1), Task=7
Zeile2 Task=7,"hallo" ->"hallo welt {inhalt4}", setbla(1,1), Task=8

Nun benötige ich als Ausgabe alle Werte innerhalb der geschweiften Klammer, also:

inhalt
inhalt2
inhalt3
inhalt4
 
In dem Fall versuche mal:
Code:
grep -Po '(?<={)[[:alnum:]]+(?=})' <file.txt>

Viele Grüße,
Pik-9
 

Ähnliche Themen

Last mit etc/passwd anzeigen lassen

[HowTo] Debian Installation mit Installer über SSH

Dateiensortierung

Zurück
Oben