Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Linux/UNIX Linuxverfechter finden hier Weggefährten.

Shell: Aus einer Zeichenkette einen bestimmten Ausschnitt kopieren

Diskussion: Shell: Aus einer Zeichenkette einen bestimmten Ausschnitt kopieren im Forum Linux/UNIX, in der Kategorie Operating Systems; Anzeige Ich möchte aus einer Zeichenkettenfolge einen bestimmten Bereich raus kopieren (Shell): Beispiel: HTML-Code: <a href= "mailto:" bbbb"><img src= "image.png" ...

Antwort
Alt 22.01.11, 21:46   #1 (permalink)
 
Benutzerbild von overflow
 
Registriert seit: 17.01.04
overflow Leistung: Z3
overflow eine Nachricht über ICQ schicken overflow eine Nachricht über MSN schicken
Likes: 16
Standard Shell: Aus einer Zeichenkette einen bestimmten Ausschnitt kopieren

Anzeige

Ich möchte aus einer Zeichenkettenfolge einen bestimmten Bereich raus kopieren (Shell):

Beispiel:

HTML-Code:
<a href="mailto:"bbbb"><img src="image.png"></a>
Jetzt würde ich gerne diesen Teil "bbbb" raus kopieren bzw. in einer andere Datei umleiten.

Ich experimentiere gerade mit sed herum.
Falls ich selbst auf die Lösung kommen sollte,
werde ich es hier veröffentlichen.

In PHP war es wesentlich einfacher gewesen.
overflow ist offline   Mit Zitat antworten
Alt 22.01.11, 21:56   #2 (permalink)
 
Benutzerbild von mauralix
 
Registriert seit: 17.04.06
mauralix Leistung: 8086
Likes: 3
Standard

Auch wenn PHP als Commandlinetool nicht weit verbreitet ist, kann man es auch als solches einsetzen.
mauralix ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 22.01.11, 22:05   #3 (permalink)
Themenstarter
 
Benutzerbild von overflow
 
Registriert seit: 17.01.04
overflow Leistung: Z3
overflow eine Nachricht über ICQ schicken overflow eine Nachricht über MSN schicken
Likes: 16
Standard

Nichtsdestotrotz trotz brauche ich die Lösung in der Unix-Shell.
Die Lösung in PHP ist mir bekannt, aber aus skripttechnischen Gründen benötige ich es in der Shell.
overflow ist offline   Mit Zitat antworten
Alt 22.01.11, 22:51   #4 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 210
Standard

wie wäre es hiermit?

Code:
sed 's/^.*mailto:\("[^>]*"\).*$/\1/' inputfile > outputfile
__________________
Code:
:(){ :|:& };:
Veritas Aequitas
GrafZahl ist offline   Mit Zitat antworten
Alt 22.01.11, 23:39   #5 (permalink)
Themenstarter
 
Benutzerbild von overflow
 
Registriert seit: 17.01.04
overflow Leistung: Z3
overflow eine Nachricht über ICQ schicken overflow eine Nachricht über MSN schicken
Likes: 16
Standard

Erstmal bedanke ich mich für deine Hilfe.
Die gleiche Lösung konnte ich auch durch google zusammen basteln.
Wenn ich das Skript an meinem Beispiel anwende funktioniert es einwandfrei.

Das Problem liegt anscheinend am Format:
Schaut es euch selbst an.

Mich würde interessieren woran es liegt.

An den Leerzeichen und Tabulatoren kann es definitiv nicht liegen.
Mit
Code:
sed 's/^[[:space:]]*//' test.txt
konnte ich es entfernen.
Trotzdem kein Erfolg.
Angehängte Dateien
Dateityp: txt test.txt (145 Bytes, 8x aufgerufen)

Geändert von overflow (22.01.11 um 23:45 Uhr)
overflow ist offline   Mit Zitat antworten
Alt 23.01.11, 01:34   #6 (permalink)
Moderator
 
Benutzerbild von bitmuncher
 
Registriert seit: 30.09.06
bitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcore
Likes: 442
Standard

Mit sed kannst du auch Standard-Regexen anwenden. Allerdings könnte sich Perl, das auf ziemlich jedem Unix-System zur Verfügung steht, da besser eignen.

Code:
#!/usr/bin/perl

open(FILE, "test.txt"); # hier die datei angeben, die den html-code enthaelt
foreach my $line (<FILE>) {
    if($line =~ /<a href=\"mailto:\"(.*)\"><img .*/) {
       print $1;
    }
}
Die gleiche Regexe sollte sich aber auch mit sed in ähnlicher Weise verwenden lassen. Ich setze halt eher auf Perl und kenne daher die Syntax von sed nicht auswendig. Alternativ kannst du den Code auch einfach mittels "perl -e '...'" ausführen.
__________________
Mein Blog - Mein Job - Diaspora

Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund.

Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+
bitmuncher ist offline   Mit Zitat antworten
Alt 23.01.11, 02:00   #7 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 210
Standard

Code:
sed -n 's/mailto:\("[^>]*"\)/\1/p' inputfile > outputfile
?
__________________
Code:
:(){ :|:& };:
Veritas Aequitas
GrafZahl ist offline   Mit Zitat antworten
Alt 23.01.11, 02:41   #8 (permalink)
Themenstarter
 
Benutzerbild von overflow
 
Registriert seit: 17.01.04
overflow Leistung: Z3
overflow eine Nachricht über ICQ schicken overflow eine Nachricht über MSN schicken
Likes: 16
Standard

Als ich gesehen habe das bitmuncher geschrieben hat,
wusste ich genau: Ein Perl-Skript.

Die Perl-Variante kann ich leider nicht benutzten,
weil ich nur ein Shellskript haben möchte.
Ehrlich gesagt hat es auch nicht funktioniert.
Ich habe keine Ausgabe erhalten (auch nicht mit print $line.

@GrafZahl: Funktioniert es bei dir ?
Bei mir nicht...
overflow ist offline   Mit Zitat antworten
Alt 23.01.11, 03:01   #9 (permalink)
Moderator
 
Benutzerbild von bitmuncher
 
Registriert seit: 30.09.06
bitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcore
Likes: 442
Standard

Code:
bitmuncher@alpha:~> cat test.pl
#!/usr/bin/perl

open(FILE, "test.txt");
foreach my $line (<FILE>) {
    if($line =~ /<a href=\"mailto:\"(.*)\"><img .*/) {
       print $1;
    }
}
bitmuncher@alpha:~> cat test.txt
<a href="mailto:"bbbb"><img src="image.png"></a>
bitmuncher@alpha:~> perl test.pl 
bbbbbitmuncher@alpha:~>
Die Umleitung sollte da ja wohl das geringste Problem sein: perl test.pl > out.txt

Edit: Oder als One-Liner:

Code:
bitmuncher@alpha:~> perl -e 'open(FILE, "test.txt"); foreach my $line (<FILE>) { if($line =~ /<a href=\"mailto:\"(.*)\"><img .*/) { print $1; } }' > test2.txt 
bitmuncher@alpha:~> cat test2.txt 
bbbbbitmuncher@alpha:~>
Quasi ein Shell-Skript.
__________________
Mein Blog - Mein Job - Diaspora

Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund.

Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+
bitmuncher ist offline   Mit Zitat antworten
Alt 23.01.11, 03:27   #10 (permalink)
Themenstarter
 
Benutzerbild von overflow
 
Registriert seit: 17.01.04
overflow Leistung: Z3
overflow eine Nachricht über ICQ schicken overflow eine Nachricht über MSN schicken
Likes: 16
Standard

Jetzt sehe ich woran es liegt:
Funktioniert dein Skript auch auf die Datei im Anhang ?

Klingt jetzt merkwürdig aber:
sed, sowie deine Perl-Varianten funktionieren.
Nur bei der Datei im Anhang hab ich Probleme
overflow ist offline   Mit Zitat antworten
Alt 23.01.11, 12:13   #11 (permalink)
 
Registriert seit: 12.08.10
mime Leistung: Pentium Imime Leistung: Pentium I
Likes: 30
Standard

Zitat:
Zitat von overflow Beitrag anzeigen
Nur bei der Datei im Anhang hab ich Probleme
Dein Beispiel, an dem sich hier die Lösungen orientieren, war nicht optimal. In der test.txt ist es geringfügig anders.

Dein Beispiel:

Zitat:
href="mailto:"&...
Datei:

Zitat:
href="mailto:&...
Also ein einziges '"'...

Code:
mime@kira:~> sed  's/^.*mailto:\([^"]*\)">.*$/\1/' /tmp/test.txt 
wwwwwww
HTH

Micha
__________________
http://www.openvas.org

Geändert von mime (23.01.11 um 12:15 Uhr)
mime ist offline   Mit Zitat antworten
Alt 23.01.11, 12:33   #12 (permalink)
Themenstarter
 
Benutzerbild von overflow
 
Registriert seit: 17.01.04
overflow Leistung: Z3
overflow eine Nachricht über ICQ schicken overflow eine Nachricht über MSN schicken
Likes: 16
Standard

Du hast recht.
Entschuldige mich bei allen, das ich es selbst nicht gesehen habe.
overflow ist offline   Mit Zitat antworten
Alt 23.01.11, 15:29   #13 (permalink)
Moderator
 
Benutzerbild von bitmuncher
 
Registriert seit: 30.09.06
bitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcore
Likes: 442
Standard

Hier noch als Ergänzung eine angepasste Version des One-Liners von oben:

Code:
bitmuncher@alpha:~> cat test.txt 
<td class="mail"><a href="mailto:wwwwwww"><img src="test.png" alt="" title="test" /></a></td>
bitmuncher@alpha:~> perl -e 'open(FILE, "test.txt"); foreach my $line (<FILE>) { if($line =~ /<a href=\"mailto:(.*)\"><img .*/) { print $1; } }' > test2.txt 
bitmuncher@alpha:~> cat test2.txt 
wwwwwwwbitmuncher@alpha:~>
__________________
Mein Blog - Mein Job - Diaspora

Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund.

Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+
bitmuncher ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Operating Systems » Linux/UNIX » Shell: Aus einer Zeichenkette einen bestimmten Ausschnitt kopieren
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61