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-Key: 119190

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

Printed on: April 19, 2024 at 22:04 o'clock

Member: paulepank
paulepank Jun 27, 2009 at 08:58:07 (UTC)
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
Mitglied: 77559
77559 Jun 27, 2009 at 10:36:39 (UTC)
Goto Top
Hallo Oliver,
da kann ich mich paulepank nur anschließen. How can I mark a post as solved?

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

Überleg mal was -n bedeutet face-wink

Gruß
LotPings
Member: ozabel
ozabel Jun 27, 2009 at 11:58:45 (UTC)
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
Member: paulepank
paulepank Jun 27, 2009 at 12:37:12 (UTC)
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
Member: mrtux
mrtux Jun 27, 2009 at 12:58:12 (UTC)
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
Member: ozabel
ozabel Jun 29, 2009 at 14:11:20 (UTC)
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
Member: paulepank
paulepank Jun 29, 2009 at 16:00:21 (UTC)
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
Mitglied: 77559
77559 Jun 29, 2009 at 16:05:01 (UTC)
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
Member: ozabel
ozabel Jun 29, 2009 at 17:16:01 (UTC)
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?
Member: paulepank
paulepank Jun 29, 2009 at 17:28:32 (UTC)
Goto Top
äh, da war noch die Frage nach der sed Version und der Shell

cu paulepank
Member: ozabel
ozabel Jun 29, 2009 at 17:32:54 (UTC)
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?
Member: paulepank
paulepank Jun 29, 2009 at 17:39:55 (UTC)
Goto Top
im Zweifel: sed --help
dort steht bestimmt sed --version
Member: ozabel
ozabel Jun 29, 2009 at 17:45:26 (UTC)
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?
Member: paulepank
paulepank Jun 29, 2009 at 18:02:55 (UTC)
Goto Top
was ist mit sed -h bzw
sed -V

cu paulepank
Member: ozabel
ozabel Jun 29, 2009 at 18:05:46 (UTC)
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
Member: paulepank
paulepank Jun 29, 2009 at 18:20:08 (UTC)
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
Member: ozabel
ozabel Jun 29, 2009 at 18:22:37 (UTC)
Goto Top
In Ordnung.
Aktualisierungen sind natürlich/leider nicht möglich ... face-sad
Danke für Deine Hilfe.

Oliver