Vortrag Regular Expressions

Aus GNU/Linux User Group Kaiserslautern

(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
Version vom 21:25, 22. Mai 2007 (bearbeiten)
Sbahl (Diskussion | Beiträge)
(Überarbeitung läuft nocht)
← Zum vorherigen Versionsunterschied
Aktuelle Version (14:12, 31. Mai 2007) (bearbeiten) (rückgängig)
Erinnern (Diskussion | Beiträge)
(Reguläre Ausdrücke)
 
(Der Versionsvergleich bezieht 5 dazwischen liegende Versionen mit ein.)
Zeile 1: Zeile 1:
-== Exkurs bzgl. == 
- 
-=== Frage zum tar-Befehl: === 
-Was passiert mit tar-ball beim auspacken, wenn Benutzer nicht im System existieren, denen im tar-Ball die Dateien zugeordnet sind? 
- 
-Sascha sagt Dateien werden mit ids erzeugt, denen jedoch keine User im System zugeordnet sind.  
- 
-'''tar''' 
- 
- tar [OPTION]... [DATEI]... 
- -t, --list 
- Inhalt eines Archivs anzeigen 
- -x, --extract, --get 
- Dateien aus Archiv holen 
- -c, --create 
- neues Archiv erzeugen 
- -p, --same-permissions 
- Zugriffsrechte beim Auspacken erhalten 
- -l, --one-file-system 
- beim Erzeugen Dateisystem nicht wechseln 
- -f, --file=ARCHIV 
- Gerät oder Datei ARCHIV benutzen 
- 
- 
-Mit dem Befehl 
- tar cplf dateisystem_dev_hda2.tar 
- 
-wird ein tar-Ball erzeugt (c), das den Dateien die gleichen Rechten erhält (p), der tar-Befehl bleibt in dem aktullem Dateisystem, und betrifft z.B. keine gemounteten Dateisysteme (l) und schreibt es in den tar-Ball mit dem Namen hda2.tar (f). 
- 
-=== Sehr cooler Befehl zum Kopieren von ganzen Dateisystemen === 
- 
- cd /mnt/ && ( cd / && tar cplf - . ) | tar xpvf -  
- 
== Reguläre Ausdrücke == == Reguläre Ausdrücke ==
Zeile 58: Zeile 25:
==== 1. Schritt ==== ==== 1. Schritt ====
- echo "<html><body><table border=1>" > /var/www/cms/index_2.html &&+ <nowiki>echo "<html><body><table border=1>" > /var/www/cms/index_2.html &&</nowiki>
==== 2. Schritt ==== ==== 2. Schritt ====
- cat tmp0_holidays.DE.csv + 
- sed -e 's/\(.*\);\(.*\);\(.*\);\(.*\);\(.*\);\(.*\);\(.*\)/+im Folgenden der Befehl, mit kleinen Umbrüchen, denn ansonsten schreibt man es hintereinander, was hier zugunsten der besseren Lesbarkeit anders gelöst wurde:
- \<tr\>\<td\>\2\<\/td\>\<td\>\3.\4.\5\<\/td\>\<\/tr\>/' + 
- >> /var/www/cms/index_2.html & & + <nowiki>cat tmp0_holidays.DE.csv |</nowiki>
 + <nowiki>sed -e 's/\(.*\);\(.*\);\(.*\);\(.*\);\(.*\);\(.*\);\(.*\)/</nowiki>
 + <nowiki>\<tr\>\<td\>\2\<\/td\>\<td\>\3.\4.\5\<\/td\>\<\/tr\>/'</nowiki>
 + <nowiki>>> /var/www/cms/index_2.html &&</nowiki>
 + 
 +Oben muss aufgrund welcher Umstände auch immer das erste 'tr' in der 3.Zeile von oben natürlich zusammengeschrieben werden. Nur leider interprtiert unser Wiki das dann leider als Tabelle ;) Ihr seid sicher so klever das hinzukriegen!
 + 
==== 3. Schritt ==== ==== 3. Schritt ====
- echo "</table></body></html>" >> /var/www/cms/index_2.html+ echo <nowiki>" </table></body></html>" >> /var/www/cms/index_2.html</nowiki>
- +
=== Ergebnis: === === Ergebnis: ===
Zeile 82: Zeile 54:
==== 1. Schritt ==== ==== 1. Schritt ====
- echo "<html><body><table border=1>" > /var/www/cms/index.html &&+ echo <nowiki>"<html><body><table border=1>" > /var/www/cms/index.html &&</nowiki>
- +
==== 2. Schritt ==== ==== 2. Schritt ====

Aktuelle Version

Inhaltsverzeichnis

[bearbeiten] Reguläre Ausdrücke

Manual page als Lektüre:

man perlre
man sed


[bearbeiten] Aufgabe:

Wir haben eine Dateieingabe der folgenden Form:

^ Bereich_0  \t Bereich_1 \t Bereich_2 \t Bereich_3 \t Bereich_4 $

und möchten diese in folgende HTML-Form überführen:

<tr><td>Bereich_0</td><td>Bereich_1</td></tr>
<tr><td>Bereich_2</td><td>Bereich_3</td><td>Bereich_4</td></tr>


Struktur unseres Dateiinputs

^ Bereich_1  \t Bereich_2 \t Bereich_3 \t Bereich_4 \t Bereich_5 \t B_6 \t B_7 $
^ DE         \t Name      \t Tag       \t Monat     \t Jahr      \t 0   \t 0   $

[bearbeiten] 1. Schritt

 echo "<html><body><table border=1>" > /var/www/cms/index_2.html &&

[bearbeiten] 2. Schritt

im Folgenden der Befehl, mit kleinen Umbrüchen, denn ansonsten schreibt man es hintereinander, was hier zugunsten der besseren Lesbarkeit anders gelöst wurde:

 cat tmp0_holidays.DE.csv |
 sed -e 's/\(.*\);\(.*\);\(.*\);\(.*\);\(.*\);\(.*\);\(.*\)/
 \<tr\>\<td\>\2\<\/td\>\<td\>\3.\4.\5\<\/td\>\<\/tr\>/' 
 >> /var/www/cms/index_2.html &&

Oben muss aufgrund welcher Umstände auch immer das erste 'tr' in der 3.Zeile von oben natürlich zusammengeschrieben werden. Nur leider interprtiert unser Wiki das dann leider als Tabelle ;) Ihr seid sicher so klever das hinzukriegen!

[bearbeiten] 3. Schritt

echo " </table></body></html>" >> /var/www/cms/index_2.html

[bearbeiten] Ergebnis:

Die Schritte zusammen ergeben folgende Ausgabe:

| Name | Datum (Tag.Monat.Jahr) | 
<tr><td>Bereich_1</td><td>Bereich_2</td><td>Bereich_3.Bereich_4.Bereich_5</td></tr>
<tr><td>  \1     </td><td>    \2   </td><td>    \3   .   \4    .    \5   </td></tr>


[bearbeiten] 1. Schritt

echo "<html><body><table border=1>" > /var/www/cms/index.html &&

[bearbeiten] 2. Schritt

cat tmp0_holidays.DE.csv
sed -e 's/;/\<\/td\>\<td\>/g' 
sed -e 's/^/\<tr\>\<td\>/' 
sed -e 's/$/\<\/td\>\<\/tr\>/' 
>> /var/www/cms/index.html && 

ergibt

DE;Rosenmontag;19;2;2007;0;0 
     <tr>
       <td>DE</td>
       <td>Rosenmontag</td>
       <td>19</td>
       <td>2</td>
       <td>2007</td>
       <td>0</td>
       <td>0</td>
     </tr>

[bearbeiten] 3. Schritt

echo "</table></body></html>" >> /var/www/cms/index.html


Ergibt folgende Tabellenausgabe:

 | DE    | Name | Tag | Monat | Jahr | 0 | 0 |
Persönliche Werkzeuge