• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] vi mit der bash steuern

lictuel

Newbie
Hallo zusammen!


Ich möchte eine Datei, die immer mit einem festen Muster kommt, automatisiert ändern.
Ich dachte dabei an ein Bash-Kommando, das vi die entsprechenden Anweisungen übergibt.

Meinetwegen kann das auch ohne bash oder ohne vi passieren.
Ich bin auch für teilweise Lösungen dankbar.

Ich habe es zunächst mit:

vi /home/*******/Desktop/*****.jsp `:18d`

...versucht. Klappt leider nicht.


Es sollen folgende Kommandos ausgeführt werden.
:18d
#löscht die ersten 18 Zeilen

:1,$s/"//g
#entfernt alle " im Text

:1,$s/EUR//g
#entfernt alle EUR im Text

:1,$s/[ <tab>]*$//
#entfernt Lehrzeichen am Zeilenende

:1,$s/ / /g
#entfernt doppelte Lehrzeichen

$d
#entfernt die letzte Zeile

:1,$y
#kopiert den gesamten text in den zwischenspeicher

:q!
#beedet vi

Ein zweites Problem ist, dass ich den Inhalt des Zwischenspeichers anschließend in OOCALC einfügen und weiterverarbeiten möchte.
Der Zwischenspeicher scheint aber vi-intern zu sein.
Wie bekomme ich also den Text auf meinen Zwischenspeicher für <STRG-V> oder direkt ins OOCALC
 

longman

Advanced Hacker
Schau Dir doch mal in einer konsole mit man sed ob das besser klappt.

Der StreamEDitor ist für nicht interaktive Textbearbeitung gemacht.
Ich habe aber selber keinen Bedarf und von daher keine Erfahrung was die konkreten Kommandos angeht.
Du kannst die Befehle in einer script Datei ablegen und diese auf Deine Textdatei arbeiten lassen.

Anstatt den gesamten Text in die Zwischenablage zu kopieren, kannst Du doch auch oocalc <datei> starten.
 
OP
L

lictuel

Newbie
Oh Danke!

funktioniert wunderbar!

Ich konnte die vi-Syntax einfach übernehmen.
Es sieht jetzt so aus:
sed -e '1,18d' -e '1,$s/"//g' -e '1,$s/EUR//g' -e '1,$s/[ <tab>]*$//' -e '1,$s/ / /g' -e '$d' /home/******/Desktop/****.jsp > ****.txt

Jetzt brauche ich nur noch einen Weg, um diese Daten in meine bestehende Excel-Tabelle einzufügen.
(Gemeint ist natürlich OpenOfficeCalc)
 

regexer

Advanced Hacker
lictuel schrieb:
Ich konnte die vi-Syntax einfach übernehmen.
Es sieht jetzt so aus:
sed -e '1,18d' -e '1,$s/"//g' -e '1,$s/EUR//g' -e '1,$s/[ <tab>]*$//' -e '1,$s/ / /g' -e '$d' /home/******/Desktop/****.jsp > ****.txt
Nicht schlecht, aber noch ein paar Anmerkungen:
- Die ganzen "1,$" weglassen. sed geht automatisch immer Zeilenweise über die ganze Datei.
- Den Tabulator kann man mit "\t" maskieren.
 
OP
L

lictuel

Newbie
Die Lösung:

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
sed -e '1,18d' -e 's/"//g' -e 's/EUR//g' -e 's/[ <tab>]*$//' -e 's/ / /g' -e '$d' /home/*******/Desktop/****.jsp >****.txt

xclip -i ****.txt
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Den Tabulator lasse ich zu meiner Übersicht unmaskiert.

Durch xclip kann ich einfach die Daten aus der Datei ins Clipboard auslesen.

Jetzt fehlt mir aber noch eine andere Aufgabe:
Ich möchte nach dem zweiten Datum einen zweiten Tab einfügen.
Hat jemand eine Idee, wie ich das automatisiere?
"2008" durch "2008<tab>" ersetzen klappt wegen der ersten 2008 nicht und ist ab nächstem Jahr ausßerdem dann falsch.
Kann ich SED in jeder Zeile an Position 22 einen Tab einfügel lassen?

14.04.2008 14.04.2008 XXXXXXXX -36,18
10.04.2008 10.04.2008 XXXXXX -225,00
10.04.2008 10.04.2008 XXXXXXXXXXXXX 19,95
01.04.2008 01.04.2008 XXXXX -8,48
 
Oben