ozabel
Goto Top

UNIX Wie Zeilenumbruch in SED eintippen?

Hallo,

und mal wieder eine kleine Frage ...

Danke
Oliver

Ich möchte eine per "sed" bearbeitete Datei mit einer Überschrift ergänzen.

Dazu kann ich folgendes nutzen:

cat DATEI | sed -n -e '1i\
Überschriftszeile ' -e .......

Für das Kommando i (insert) ist laut meinen Nachforschungen hinter dem "i" ein Zeilenumbruch notwendig, so dass ich die Befehle nicht mehr in eine Zeile schreiben kann.
Ich könnte mir aber vorstellen, dass man den Zeilenumbruch auch per Buchstabenkürzel eingeben kann, den sed dann als Zeilenumbruch interpretiert, so dass ich wieder auf eine Zeile komme.

Weiß jemand, ob und wie das geht?

Danke
Oliver

Content-ID: 119190

Url: https://administrator.de/contentid/119190

Ausgedruckt am: 26.11.2024 um 02:11 Uhr

paulepank
paulepank 27.06.2009 um 10:58:07 Uhr
Goto Top
Hallo Oliver,

Wir würden uns gern voller Tatkraft deines Problems annehmen, sind aber zur Zeit noch mit deinen Beiträgen vom
20.12.08, 31.12.08 und 23.06.08 beschäftigt.
Oder sind diese Probleme etwa gelöst ? Dann markiere bitte diese Beiträge auch als gelöst.

Übrigens:
Die Lösung für das Editieren ist sehr einfach.
Dein Code kann nicht funktionieren, da deine Nachforschungen sehr nachlässig waren.

cu paulepank
77559
77559 27.06.2009 um 12:36:39 Uhr
Goto Top
Hallo Oliver,
da kann ich mich paulepank nur anschließen. Wie kann ich einen Beitrag als gelöst markieren?

Lesenswert wäre auch noch Useless use of cat
Und das dir schon bekannte Tutorium

Überleg mal was -n bedeutet face-wink

Gruß
LotPings
ozabel
ozabel 27.06.2009 um 13:58:45 Uhr
Goto Top
Guten Morgen,

danke für den Hinweis. Habe die alten Beiträg jetzt als gelöst markiert.

Nochmal zur Ergänzung meiner Frage:
Ich habe nur einen Auschnitt des ganzen Befehls gegeben. Dahinter kommt noch die Ausgabe der gewünschten Zeilen (daher auch -n).
Es funktioniert ja auch alles.
Ich möchte lediglich wissen, wie ich, anstatt einen echten Zeilenumbruch per ENTER-Taste auszuüben, den Zeilenumbruch per Zeichen emulieren kann (da ich dann z.B. bei fünf Überschriftszeilen anstatt fünf neuer Zeilen im Befehl nur eine Zeile bräuchte).

In diesem Zusammenhang: vielleicht gibt es so ein Zeichen auch für den Tabulator?

Danke
Oliver
paulepank
paulepank 27.06.2009 um 14:37:12 Uhr
Goto Top
Moin,

Fakt ist:
Was -n bedeutet hast du nicht gelöffelt.
Mit den Beiträgen der Links von LotPings hast du dich nicht beschäftigt.
Das Manual von sed oder einem anderem Unixtool hast du nicht mal im Ansatz gelesen, sonst wüßtest du wie ein Tabulator dargestellt wird. Eigne dir doch etwas Grundlagenwissen an.

der Code
sed -e 1i"\Das ist eine Überschrift\\toben" -i DATEI  
sollte das gewünschte Ergebnis bringen (mit TAB und Leerzeichen) face-smile

cu paulepank
mrtux
mrtux 27.06.2009 um 14:58:12 Uhr
Goto Top
Hi !

Zitat von @paulepank:
Das Manual von sed oder einem anderem Unixtool hast du nicht mal im
dargestellt wird. Eigne dir doch etwas Grundlagenwissen an.

Vielleicht basiert sein Grundwissen auch einfach nur auf einer falsch gewählten Information: http://de.wikipedia.org/wiki/Sozialistische_Einheitspartei_Deutschlands face-devilish

mrtux
ozabel
ozabel 29.06.2009 um 16:11:20 Uhr
Goto Top
Hallo,

da habe ich beim Generalisieren wohl zu wenig Code kopiert und daher ist das "-n" meines ersten
sed-commands "Auswahl von Zeilen" stehen geblieben.
Insofern hast Du recht - natürlich ist die hier angesprochene Zeile ohne "-n"
(und ich habe es doch verstanden face-wink)

Hier der komplette funktionsfähige Block:

cat Lauf0 | sed -n -e '/(Künstler)/p;/ 2009$/p' |
sed -e 's/(Künstler)g;s/Erscheinungstermin:g;1i\
Amazon Neuerscheinung mit Stand vom 25.06.2009\
' > Lauf4


Auch mit den Links von LotPings (danke dafür) hatte ich mich beschäftigt.
Das cat habe ich aber erstmal drin gelassen, damit ich nur am Ende editieren muss.

Und in diesen Beiträgen habe ich "nur" gefunden , dass man direkt die Tab-Taste nutzt oder zB Strg V + Strg I eingibt.
Dass führt aber beides dazu, dass in der Zeile der Tab-Sprung auch ausgeführt wird. Und ich dachte, dass es dafür
vielleicht ein eigenes Kürzel (aus zB 2 Zeichen) gibt.

Deinen Vorschlag
sed -e 1i"\Das ist eine Überschrift\\toben" -i DATEI
habe ich so eingetippt (meine Datei heißt Lauf0):
sed -e 1i"\Das ist eine Überschrift\\toben" -i Lauf0
Als Ergebnis bekomme ich leider eine Fehlermeldung:
sed: 0602-404 Function 1i\Das ist eine Überschrift\toben cannot be parsed.
Also weder Tab noch Zeilenumbruch ...

Insofern bleibt meine Frage bestehen: wie kann ich einen Zeilenumbruch per Kürzel so eingeben,
dass ich keinen echten Zeilenumbruch eingeben muss, d.h.
anstatt

...;1i\
Amazon Neuerscheinung mit Stand vom 25.06.2009\
' > Lauf4


hätte ich gerne

...;1i\??Amazon Neuerscheinung mit Stand vom 25.06.2009\??==...==' > Lauf4

wobei die ?? für das Kürzel stehen.

Danke
Oliver
paulepank
paulepank 29.06.2009 um 18:00:21 Uhr
Goto Top
Hallo,

ich kenne deine Unix und sed-Version nicht.
Auf zwei Linuxdistributionen mit der GNU Version von sed läuft das ohne Fehler.
habe ich so eingetippt
Vielleicht versuchst du es mit Copy&Paste.
sed: 0602-404 Function 1i\Das ist eine Überschrift\toben cannot be parsed
hast du bestimmt schon recherchiert.

Mag ja sein, daß du mittlerweile etwas gelesen hast, aber die Grundlagen fehlen immer noch.
Preisfrage:
Nachdem du mit \t den Tabulator kennst, wie wird das Newline dargestellt ?
Grundlagen zum lesen hier

cu paulepank

Edit: .. und es kommt auf die Shell an. Mein Beispiel ist mit der Bash getestet
77559
77559 29.06.2009 um 18:05:01 Uhr
Goto Top
Zitat von @paulepank:
Preisfrage:
Nachdem du mit \t den Tabulator kennst, wie wird das
Newline dargestellt ?
Grundlagen zum lesen hier
Ergänzend vielleicht noch dies

Gruß
LotPings
ozabel
ozabel 29.06.2009 um 19:16:01 Uhr
Goto Top
Hallo Ihr zwei,

Ihr denkt bestimmt schon dass ich etwas beschränkt bin. Aber bei mir klappt es einfach nicht.
Das "\n" ist mir durchaus geläufig (nutze ich zB bei "printf", aber ich kann es in der sed-Zeile scheinbar nicht nutzen,
und ich habe von \n bis \\\n alles probiert .

Ich nutze AIX5.3.

Ich werde jetzt mal die einzelnen Schritte hier reinkopieren:

Der funktionierende Befehl (mit echtem Zeilenumbruch)
cat Lauf0 | sed -e '1i\
Hallo'

ergibt in der history den Befehl
cat Lauf0 | sed -e '1i\^JHallo'

Ziel wäre es also, das ^J durch eine Zeichenkombination auf der Kommandozeile eingeben zu können.
Ein echtes ^J funktioniert natürlich nichts.

So, und jetzt der Versuch mit \n

cat Lauf0 | sed -e '1i\\nHallo'

mit Ergebnis
sed: 0602-404 Function 1i\\nHallo cannot be parsed.


Auch die Musterzeile
sed -e 1i"\Das ist eine Überschrift\\toben" -i DATEI
funktioniert nicht.

Umgewandelt in
sed -e '1i\
Das ist eine Überschrift\\toben' DATEI

klappt zumindest die Funktion "i", aber mit Ergebnis
Das ist eine Überschrift\toben
Zeile 1
Zeile 2

Also auch nichts mit Tabulator - den kann ich aber auch wieder hart eingeben
Eingabe (...... stellt TAB dar):
sed -e '1i\
Das ist eine Überschrift\
........mit einem TAB' DATEI

wird zu
sed -e '1i\^JDas ist eine Überschrift\^J......mit einem TAB' DATEI

mit Ergebnis
Das ist eine Überschrift
........mit einem TAB
Zeile 1
Zeile 2

Wir Ihr seht versuche ich vieles aber bekomme kein Ergebnis hin ....

Hat noch jemand eine Idee?
paulepank
paulepank 29.06.2009 um 19:28:32 Uhr
Goto Top
äh, da war noch die Frage nach der sed Version und der Shell

cu paulepank
ozabel
ozabel 29.06.2009 um 19:32:54 Uhr
Goto Top
AIX 5.3.
Kornshell

Wie bekomme ich denn die sed-Version heraus?
Die AIX-Version sehe ich ja beim Anmelden, aber die von sed?
paulepank
paulepank 29.06.2009 um 19:39:55 Uhr
Goto Top
im Zweifel: sed --help
dort steht bestimmt sed --version
ozabel
ozabel 29.06.2009 um 19:45:26 Uhr
Goto Top
Leider nein. "Help" geht nicht, aber mit "man" bekommt man ja die Hilfe angezeigt, doch auch dort weder im Kopf noch am Fuß ein Hinweis auf die Version (hatte ich auch vorhin schon dort gesucht).
Vielleicht ist es die ganz einfache Version von sed?
paulepank
paulepank 29.06.2009 um 20:02:55 Uhr
Goto Top
was ist mit sed -h bzw
sed -V

cu paulepank
ozabel
ozabel 29.06.2009 um 20:05:46 Uhr
Goto Top
Weder noch ... (und auch nicht groß/klein)

sed -V
sed: Not a recognized flag: V
Usage: sed [-n] Script [File ...]
sed [-n] [-e Script] ... [-f Script_file] ... [File ...]

Oliver
paulepank
paulepank 29.06.2009 um 20:20:08 Uhr
Goto Top
für mich wars das hier. Habe keine Dokus
Tipp für dich:
aktualisiere sed auf die neueste Version (besser lasse aktualisieren, denn du bist ja nicht der Admin) oder besser, nutze ein zeitgemäßes BS.
Zum Einfügen von ein paar Zeilen braucht man auch keinen sed (zb cp)

In der ksh funktioniert mein Code auch.
Nächstes mal bitte gleich mehr Angaben zu der Softwareumgebung und keine Codebruchstücke.

cu paulepank
ozabel
ozabel 29.06.2009 um 20:22:37 Uhr
Goto Top
In Ordnung.
Aktualisierungen sind natürlich/leider nicht möglich ... face-sad
Danke für Deine Hilfe.

Oliver