sed Befehl

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Spike1986
Beiträge: 153
Registriert: 25.01.2012 20:16:47

sed Befehl

Beitrag von Spike1986 » 28.02.2014 20:51:36

Ich möchte gern das im textdatei.txt bis zum Wort foo alle Zeilen und Zeilen gelöscht werden.
Und im zweiten schritt sollen alle Zeilen und Zeichen nach doo gelöscht werden.
Im dritten Schritt sollen das Wort doo in Wort aaa geändert werden.

Mit diesem Befehl bekomm ich es zwar gelöscht aber es sind trotzdem noch drei Zeilen ober halb foo voranden.

Code: Alles auswählen

sed -e 1,/foo/d  textdatei.txt
Edit: Schritt drei geändert

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: sed Befehl

Beitrag von Cae » 28.02.2014 21:47:49

Code: Alles auswählen

$ (seq 5; echo foo; seq 4; echo bar; seq 3) | sed -n 's/bar/baz/g;/foo/,/baz/p'
foo
1
2
3
4
baz
$ 
Bei Bedarf kann und sollte man die Regex' noch auf volle Zeilen festigen, z.B. per /^foo$/.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Spike1986
Beiträge: 153
Registriert: 25.01.2012 20:16:47

Re: sed Befehl

Beitrag von Spike1986 » 01.03.2014 00:11:43

Cae hat geschrieben:

Code: Alles auswählen

$ (seq 5; echo foo; seq 4; echo bar; seq 3) | sed -n 's/bar/baz/g;/foo/,/baz/p'
foo
1
2
3
4
baz
$ 
Bei Bedarf kann und sollte man die Regex' noch auf volle Zeilen festigen, z.B. per /^foo$/.

Gruss Cae

Danke erstsmal funktioniert soweit bis auf:

"bar eine Antwort" in der textdatei.txt erscheint dann mit dem Befehl so:

"baz eine Antwort" unterhalb der Zeile ist alles weg so wie es gehört und nach baz soll auch nichts mehr kommen.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: sed Befehl

Beitrag von Cae » 01.03.2014 14:16:30

Ist "eine Antwort" variabel? Falls das so ist, wuerde ich mit s/^bar.*$/baz/g die ganze Zeile matchen und durch nur baz ersetzen. Falls nicht, halt per

Code: Alles auswählen

s/^bar ist eine Antwort$/baz/g
In beiden Faellen wuerde ich ausserdem die RegEx' fuer den p-Befehl entsprechend festigen, da nun sichergestellt ist, dass baz allein auf einer Zeile steht:

Code: Alles auswählen

/foo/,/^baz$/p
Und dasselbe nach Moeglichkeit fuer /foo/. Ansonsten matcht es dir irgendwann die zweite Zeile von

Code: Alles auswählen

1
hier ist foo und bar zu sehen
1
2
foo
1
anstat der vorletzten.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Spike1986
Beiträge: 153
Registriert: 25.01.2012 20:16:47

Re: sed Befehl

Beitrag von Spike1986 » 02.03.2014 10:51:27

Code: Alles auswählen

(seq 5; echo Termine; seq 4; echo Hinterlasse; seq 3) | sed -n 's/^Hinterlasse.*$/JD/g;/^Termine$/,/^JD$/p' index.txt
so habe ich das jetzt gemacht. Schaut gut aus. Ich merk gerade damit kam man sehr viel rum spielen.

Bin gerade am probieren:

lade zwei index.hmtl runter, diese wandle ich in jeweils ein .txt um < da habe ich soweit
sollen dann mit dem Befehl bearbeiten werden und dann sollen beide .txt zusammen gefügt werden.

Wenn ich nach JD eine Leerzeile haben möchte muss ich doch nur \n angeben oder?

Code: Alles auswählen

(seq 5; echo Termine; seq 4; echo Hinterlasse; seq 3)
sorgt dieser Befehl dafür das nur der bereich Termine bis Hinterlasse (JD) angezeigt wird?

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: sed Befehl

Beitrag von Cae » 02.03.2014 21:36:41

Ich nehme mal an, dass in der unteren Codebox eigentlich der sed-Befehl von oben stehen sollte, denn die Subshell (mit (seq...)) generiert ja nur die Testdaten. Und ja,

Code: Alles auswählen

's/^Hinterlasse/JD\n/g; ...'
sollte genauso funktionieren, wie du annimmst.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Spike1986
Beiträge: 153
Registriert: 25.01.2012 20:16:47

Re: sed Befehl

Beitrag von Spike1986 » 04.03.2014 00:58:50

Danke.

Perfekt klappt alles wunderbar. :THX:

Antworten