mit sed Zeilen auf einmal löschen
mit sed Zeilen auf einmal löschen
Hallo Team
ich hab eine Datei mit 15 Zeilen Text.
Nu habe ich von sed gelesen, daß man Zeilen löschen kann.
Aus meiner Datei möchte ich die 3. 5. 9. und 17. Zeile gleichzeitig löschen.
Wie geht das bitte ?
Danke
Gruß root2root
ich hab eine Datei mit 15 Zeilen Text.
Nu habe ich von sed gelesen, daß man Zeilen löschen kann.
Aus meiner Datei möchte ich die 3. 5. 9. und 17. Zeile gleichzeitig löschen.
Wie geht das bitte ?
Danke
Gruß root2root
Re: mit sed Zeilen auf einmal löschen
z.B.
Wobei ich mich gerade Frage, wie man aus einer 15-zeiligen Datei die 17. Zeile löscht....
Code: Alles auswählen
sed -i -e '3d' -e '5d' -e '9d' -e '17d' datei.txt
MfG GoKi
:wq
:wq
Re: mit sed Zeilen auf einmal löschen
Hi,
da nach dem loeschen von Zeile 3 der Inhalt von Zeile 5 mittlerweile in Zeile 4 steht?
ohne es gerade testen zu koennen, aber funktioniert das so wirklich? Muesste man nicht "von hinten nach vorne" loeschen, alsoGoKi hat geschrieben:z.B.Code: Alles auswählen
sed -i -e '3d' -e '5d' -e '9d' -e '17d' datei.txt
Code: Alles auswählen
sed -i -e '17d' -e '9d' -e '5d' -e '3d' datei.txt
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
Re: mit sed Zeilen auf einmal löschen
Die Datei wird erst geschrieben wenn das Programm durchgelaufen ist, d.h. alle Eingabezeilen bearbeitet hat. Deswegen "fehlt" bei diesen noch keine Zeile.da nach dem loeschen von Zeile 3 der Inhalt von Zeile 5 mittlerweile in Zeile 4 steht?
Außerdem würde die Änderung der Abfolge der Parameter in diesem Fall nichts bewirken, weil sed den Addressteil aller Anweisung mit dem der gerade eingelesenen Zeile vergleicht und bei Übereinstimmung die Anweisung ausführt. Die Zeilen werden bei beiden Varianten in der gleichen Reihenfolge gelöscht.
Re: mit sed Zeilen auf einmal löschen
tippt sich leichter:
Gruß
gms
Code: Alles auswählen
sed -ie '3d;5d;9d;17d' datei.txt
gms
Re: mit sed Zeilen auf einmal löschen
Tolle Stats
Dank euch allen.
@gms,
sed -ie '3d;5d;9d;17d' datei.txt
ich hab folgendes versucht
tmp="sed -ie '3d;5d;9d;17d'"
$tmp datei,txt
Meldung:
sed: -e Ausdruck #1, Zeichen 1: Unbekannter Befehl: `''
gruß root2root
Dank euch allen.
@gms,
sed -ie '3d;5d;9d;17d' datei.txt
ich hab folgendes versucht
tmp="sed -ie '3d;5d;9d;17d'"
$tmp datei,txt
Meldung:
sed: -e Ausdruck #1, Zeichen 1: Unbekannter Befehl: `''
gruß root2root
Re: mit sed Zeilen auf einmal löschen
Dann lass es doch wegMeldung:
sed: -e Ausdruck #1, Zeichen 1: Unbekannter Befehl: `''
Code: Alles auswählen
tmp='sed -ie 3d;5d;9d;17d'
$tmp datei,txt
Re: mit sed Zeilen auf einmal löschen
hallo dimi
muß es nicht heissen
tmp='sed -ie '3d;5d;9d;17d' '
mit extra separierten Steuersätzen '3d...'
oder erkenn die bash das auch so ?
gruß root2root
muß es nicht heissen
tmp='sed -ie '3d;5d;9d;17d' '
mit extra separierten Steuersätzen '3d...'
oder erkenn die bash das auch so ?
gruß root2root
Re: mit sed Zeilen auf einmal löschen
korrekt wäre etwa:
oder
Wozu soll diese tmp-Variable gut sein ?
Code: Alles auswählen
tmp="sed -ie '3d;5d;9d;17d'"
eval $tmp ./datei.txt
Code: Alles auswählen
tmp='sed -ie 3d;5d;9d;17d'
$tmp datei.txt
Wozu soll diese tmp-Variable gut sein ?
Re: mit sed Zeilen auf einmal löschen
ich habe folgendes vor:
In einem zyklus werden dateien zn.txt generiert:
anhand dieser datei zn.txt soll ein sed-befehl augebaut werden, wo dieser inhalt anschliessend in den befehlsargumenten auftaucht
cat zn.txt
3
5
9
17
abgebildet in sed -ie '3d;5d;9d;17d'. Dazu brauche ich ein kleines Shellscript, einen Ansatz habe ich hier mal erzeugt
http://debianforum.de/forum/viewtopic.p ... 15#p700026
leider bisher ohne erfolg bzw. mit dem geschilderten fehler.
hat jemand eine idee ??
Danke euch + Gruß
root2root
In einem zyklus werden dateien zn.txt generiert:
anhand dieser datei zn.txt soll ein sed-befehl augebaut werden, wo dieser inhalt anschliessend in den befehlsargumenten auftaucht
cat zn.txt
3
5
9
17
abgebildet in sed -ie '3d;5d;9d;17d'. Dazu brauche ich ein kleines Shellscript, einen Ansatz habe ich hier mal erzeugt
http://debianforum.de/forum/viewtopic.p ... 15#p700026
leider bisher ohne erfolg bzw. mit dem geschilderten fehler.
hat jemand eine idee ??
Danke euch + Gruß
root2root
Re: mit sed Zeilen auf einmal löschen
Code: Alles auswählen
gms@sirius ~ $ for((i=1;$i<15;i++)); do echo $i; done >datei.txt
gms@sirius ~ $ for((i=1;$i<15;i+=3)); do echo $i; done >liste.txt
gms@sirius ~ $ X=($(<liste.txt)) # speichert liste.txt in ein Array X
gms@sirius ~ $ Y="${X[@]}" # wandelt das Array X in ein mit Leerzeichen getrennte Kette um und speichert diese in Y
gms@sirius ~ $ Z="${Y// /d;}d;" # ersetzt die Leerzeichen mit 'd;' und hängt an das Ende auch noch ein 'd;' an
gms@sirius ~ $ echo $Z # Z schaut dann so aus:
1d;4d;7d;10d;13d;
gms@sirius ~ $ sed -ie $Z datei.txt
gms@sirius ~ $ cat datei.txt
2
3
5
6
8
9
11
12
14
gms@sirius ~ $
Re: mit sed Zeilen auf einmal löschen
Hi gms,
kann man das pipen :
Versuch:
Z=$( $(<liste.txt) | "${X[@]}" | "${Y// /d;}d;" )
Gruß root2root
kann man das pipen :
Versuch:
Z=$( $(<liste.txt) | "${X[@]}" | "${Y// /d;}d;" )
Gruß root2root
Re: mit sed Zeilen auf einmal löschen
läßt sich besser ohne Pipe zusammenfassen:
durch das Zusammenfassen leidet allerdings auch die Fehlerbehandlung. So würden bei diesem Kommando, wenn liste.txt leer ist, alle Zeilen aus datei.txt gelöscht. Das könntest du aber im awk-Teil z.B im END-Block berücksichtigen
Code: Alles auswählen
sed -ie $(awk '{l=l $0 "d;" } END{print l }' liste.txt ) datei.txt