sed -> wie gehts einfacher?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
AliceD
Beiträge: 5
Registriert: 03.11.2005 13:26:53

sed -> wie gehts einfacher?

Beitrag von AliceD » 11.04.2006 16:54:44

hallo,

ich hab folgende zeile in einer datei

<td>Rang:</td><td width="25%">17.</td>

nun will ich mittels sed nur an die 17.

bisher hab ich es so:

sed "s/<td>Rang:<\/td><td width=\"25\%\">//" | sed "s/<\/td>//"

das geht doch aber bestimmt noch einfacher bzw. kürzer... leider bin ich der totale sed anfänger und wäre euch für ratschläge sehr dankbar.

danke!

Benutzeravatar
h-man
Beiträge: 745
Registriert: 05.02.2003 13:10:08
Wohnort: Berlin
Kontaktdaten:

Beitrag von h-man » 11.04.2006 17:44:52

in dem fall finde ich "cut" einfacher als sed:

echo "<td>Rang:</td><td width="25%">17.</td>" | cut -d \> -f4 | cut -d \< -f1

ergibt "17."
wolltest du das?

evtl. ist cut hier auch schneller als sed.
Nieder mit der Schwerkraft.

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 11.04.2006 18:49:03

sed arbeitet auf Zeilenbasis daher ist das was du vorhast eher nicht so gut mit sed zu machen bzw. eine Kombination aus sed und cut eine feine Sache.
Besser wäre awk oder perl.
Wofür sed gut ist, ist das finden einer Zeile mit einem entsprechendem Muster unter vielen anderen.

Code: Alles auswählen

markusgattol@pc1:/tmp$ cat file 
<td>Rang:</td><td width="25%">17.</td>
markusgattol@pc1:/tmp$ echo -e "1 \n 2\n  3 and some text ..." >> file && cat file
<td>Rang:</td><td width="25%">17.</td>
1
 2
  3 and some text ...
markusgattol@pc1:/tmp$ sed -n '/\([[:digit:]]*\.\)/p' file | awk 'BEGIN {FS = ">"} {print $4}' | cut -d . -f1
17

markusgattol@pc1:/tmp$ 
Wahr ist es gibt um dein Ziel zu erreichen eine Vielzahl an Möglichkeiten.

markus

edit:
sehe gerade das noch etwas fine tuning angesagt wäre
- den Punkt nach der Zahl möchtest du ja haben
- die Leerzeilen müssen nicht sein

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 12.04.2006 03:00:34

Hallo AliceD,
Deine Zeile etwas gekürzt:

Code: Alles auswählen

sed 's/.*">//' | sed 's/<.*//'
zusammengefasst

Code: Alles auswählen

sed 's/.*">//;s/<.*//'
oder

Code: Alles auswählen

sed 's/.*">\(.*\)<.*/\1/'
Gruß fuzzy

AliceD
Beiträge: 5
Registriert: 03.11.2005 13:26:53

Beitrag von AliceD » 12.04.2006 10:12:50

oje, wie ich sehe führen wieder tausend wege nach rom:) danke ich euch allen!!!

Antworten