ubuntuusers.de

sed - Der verflixte Bindestrich

Status: Gelöst | Ubuntu-Version: Ubuntu 18.10 (Cosmic Cuttlefish)
Antworten |

paulheinz

Anmeldungsdatum:
7. Januar 2019

Beiträge: Zähle...

Wohnort: Rostock

Mit der Hilfe von user_unknown sowie dem Skript

1
2
3
4
5
6
7
8
#!/bin/sh
xsel -b > /home/user/Downloads/autor_1.txt &&
sed -r "s#[^/]+/([^/]+)/.*#\1#" /home/user/Downloads/autor_1.txt > /home/user/Downloads/autor_2.txt &&
xsel -cb &&
sed -e "s#-# #g;" /home/user/Downloads/autor_2.txt > /home/user/Downloads/autor.txt &&
xsel -cb &&
xsel -bi < /home/user/Downloads/autor.txt &&
exit 0

ist es Möglich aus der Zeile

person objlink" itemprop="url" href="/Michael-Bartsch/!a48/"><h4 itemprop="name">Michael Bartsch</h4><h5 itemprop="jobTitle"> ...

Autorennamen in zwei Schritten zu extrahieren:

  1. Michael-Bartsch

  2. Michael Bartsch

Bei Doppelnamen mit Bindestrich, wie

  1. /Alfred-Neumann-Altfrau/

  2. /Alphra-Bertha-Krupp/

  3. /Caesar-Brutus-Römer-Stich/

wird der erste statt der mittlere Bindestrich aus den Namen extrahiert.

Auch alle Versuche, aus dem Textteil

... >Michael Bartsch< ...

bzw. den Textteilen mit mehr als einem Bindestrich, wie z.B.

... >Caesar-Brutus-Römer-Stich< ...

gingen fehl.

Ich bitte um Hilfe!

Herzlichen Danke, Heinz

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

paulheinz schrieb:

sed -e "s#-# #g;" /home/user/Downloads/autor_2.txt > /home/user/Downloads/autor.txt &&

"

Das g am Ende des sed-Befehl sorgt dafür, dass alle Vorkommen von "-" in der Zeile durch ein Leerzeichen ersetzt werden.

Für mich sieht das so aus, als würdest du versuchen HTML mit regulären Ausdrücken zu parsen, was leider nicht zuverlässig möglich ist. Dafür gibt es HTML-Parser, mit denen man gezielt einzelne Elemente extrahieren kann. Gibt es irgendwo representative Beispiele für das Ausgangsmaterial und was du daraus extrahieren willst? Wenn man das nicht in der Bash macht (sondern z.B. mit Python3 und Beautifulsoup4) könnte man erst die gewünschten Elemente extrahieren und dann bestimmte Ersetzungen darauf anwenden.

Ich bin mir nicht ganz sicher, warum du den Namen aus href="/Michael-Bartsch/!a48/" extrahieren willst, wenn du ihn in der korrekten Form auch aus <h4 itemprop="name">Michael Bartsch</h4> holen kannst, aber falls das zuverlässig in einer Zeile steht könnte man z.B. sowas machen:

1
grep -Po '(?<=href="/)[^/]+(?=/)|(?<=<h4 itemprop="name">).*?(?=</h4>)' <<< 'person objlink" itemprop="url" href="/Michael-Bartsch/!a48/"><h4 itemprop="name">Michael Bartsch</h4><h5 itemprop="jobTitle"> ...'
Antworten |