Shellskript: Leerzeichen und Zeilenumbrüche entfernen
Shellskript: Leerzeichen und Zeilenumbrüche entfernen
Ich bin auf der Suche nach einem Shellskript das mir folgendes macht: Ich übergebe dem Skript eine Textdatei, es entfernt alle Leerzeichen und Zeilenumbrüche in der Textdatei und speichert sie wieder unter dem selben Namen. Hat jemand eine Idee?
Danke
Danke
Bevor Du einen Beitrag postest:
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
Code: Alles auswählen
tr -d '\r\n '
Formerly known as Trigger.
HP 8510p - Debian Sid
Mitglied des Debian-KDE-Teams
HP 8510p - Debian Sid
Mitglied des Debian-KDE-Teams
Vielen Dank für eure Hilfe! Leider habe ich einen kleinen Fehler gemacht. Also Zeilenumbrüche sollen komplett entfernt werden, aber Leerzeichen nicht alle, sondern nur auf die Anzahl 1 reduziert. Also 5 Leerzeichen in Folge sollen auf eines reduziert werden Alternativ kann man auch alle entfernen, außer diejenigen zwischen zwei Tags, aber dann muss man viel aufwendiger parsen. Hier ein Beispiel einer Textdatei
Die Leerzeichen sollen reduziert und Zeilenumbrüche entfernt werden, so dass es danach so aussieht:
Das ganze als Shellskript, sodass ich per * gleich mal 10 Dateien reingeben kann und 10 wieder rausbekomm:
so vielleicht?
Das ist jetzt noch ohne die Leerzeichenbehandlung, aber wenigstens schon mal die Zeilenumbrüche draußen. Viel mehr kann man auch nicht mehr machen, um den Kode unkenntlich zu machen. Es geht mir nämlich darum, den Wiederverwendungswert meiner html Dateien zu senken.
Code: Alles auswählen
<html>
<head>
<tag>Ich bin ein Idiot</tag>
</head>
</html>
Code: Alles auswählen
<html> <head> <tag>Ich bin ein Idiot</tag> </head></html>
Code: Alles auswählen
#!/bin/bash
cat $i | tr -d '\n' > $i
Das ist jetzt noch ohne die Leerzeichenbehandlung, aber wenigstens schon mal die Zeilenumbrüche draußen. Viel mehr kann man auch nicht mehr machen, um den Kode unkenntlich zu machen. Es geht mir nämlich darum, den Wiederverwendungswert meiner html Dateien zu senken.
Bevor Du einen Beitrag postest:
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
So what? Jemand der Interesse daran hat lässt sich den HTML-Code einfach formatieren und gut ist. Gewonnen hast du damit nichts.mohameth hat geschrieben:Es geht mir nämlich darum, den Wiederverwendungswert meiner html Dateien zu senken.
Formerly known as Trigger.
HP 8510p - Debian Sid
Mitglied des Debian-KDE-Teams
HP 8510p - Debian Sid
Mitglied des Debian-KDE-Teams
Kann man den automatisch formatieren lassen?Trigger. hat geschrieben:So what? Jemand der Interesse daran hat lässt sich den HTML-Code einfach formatieren und gut ist. Gewonnen hast du damit nichts.mohameth hat geschrieben:Es geht mir nämlich darum, den Wiederverwendungswert meiner html Dateien zu senken.
Bevor Du einen Beitrag postest:
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
-
- Beiträge: 184
- Registriert: 21.09.2005 10:43:37
- Wohnort: Dresden
Hi,
Leerzeichen kannst Du mit diesem sed-Konstrukt entfernen:
Trigger hat hier natürlich recht. Das hilft Dir nicht wirklich.
Gruß, BermudaHonk
Leerzeichen kannst Du mit diesem sed-Konstrukt entfernen:
Code: Alles auswählen
cat beispieltext.txt |sed "s/\ \{1,\}/ /g;"
Gruß, BermudaHonk
The only Microsoft product ever to ship that doesn't suck will probably be a vacuum cleaner!
So kann man die Leerzeichen entfernen. Eigentlich sollte man doch auch mit sed noch den Zeilenumbruch entfernen können, indem man noch ein -e anhängt mit dem entsprechenden Befehl (bekomme es aber irgendwie auch nicht hin, warum weiß ich allerdings noch nicht).
Mit perl am Ende funktioniert es allerdings
Wieso nicht mit sed?
Mit perl am Ende funktioniert es allerdings
Code: Alles auswählen
... | perl -pe 's/\n//g'
Oh, yeah!
-
- Beiträge: 184
- Registriert: 21.09.2005 10:43:37
- Wohnort: Dresden
Hi,
sed arbeitet Zeilenweise und entfernt das "newline" bevor die Zeile in den Speicher gelesen wird. Daher greift das Muster so nicht. Nach Beendigung aller Editorkommandos wird das Ergebnis auf die Standardausgabe geschrieben, wobei das "newline" wieder angehängt wird.
Gruß, BermudaHonk
sed arbeitet Zeilenweise und entfernt das "newline" bevor die Zeile in den Speicher gelesen wird. Daher greift das Muster so nicht. Nach Beendigung aller Editorkommandos wird das Ergebnis auf die Standardausgabe geschrieben, wobei das "newline" wieder angehängt wird.
Gruß, BermudaHonk
The only Microsoft product ever to ship that doesn't suck will probably be a vacuum cleaner!
- finupsen
- Beiträge: 1327
- Registriert: 21.04.2004 20:07:05
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dortmund
-
Kontaktdaten:
hallo,
Was newline betrifft - mit tr geht das ganz gut:
mit sed auch:
kann man hier nachlesen (unter 5.10) : http://faqs.cs.uu.nl/na-dir/editor-faq/sed.html
Was newline betrifft - mit tr geht das ganz gut:
Code: Alles auswählen
tr -d '\n' < datei
Code: Alles auswählen
sed ':a;N;$!ba;s/\n//g' datei
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.
... und Wasser ist naß.
-
- Beiträge: 184
- Registriert: 21.09.2005 10:43:37
- Wohnort: Dresden
Hi,
man schmeißt seinen bevorzugten Browser an und googelt ein paar Sekunden lang
Das hab ich vom Unixboard abgeschrieben. Ich kann mich noch entsinnen einmal etwas anderes verwendet zu haben. Es war ein Stückchen kürzer und ich meine ich hatte damals auch "newlines" entfernt. Sonst mache ich es einfach mit tr wie die meisten hier.
Gruß, BermudaHonk
===============
ach, da war ja finupsen schneller zur Stelle
man schmeißt seinen bevorzugten Browser an und googelt ein paar Sekunden lang
Code: Alles auswählen
sed ':a;N;$!ba;s/\n//g' Beispieldatei.txt
Gruß, BermudaHonk
===============
ach, da war ja finupsen schneller zur Stelle
The only Microsoft product ever to ship that doesn't suck will probably be a vacuum cleaner!
- finupsen
- Beiträge: 1327
- Registriert: 21.04.2004 20:07:05
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dortmund
-
Kontaktdaten:
Jetzt wäre es noch ganz interessant zu wissen, was da genau passiert
:a = sprungziel (a = label)
ba = ein sprung (a = label)
!$ = aber nicht die letzte zeile
N = hänge ein newline an
und das was dabei rauskommt bekommt ein ganz normales /s\n//g
Die frage ist wie das genau funktioniert. Wo kommt was rein, wo wird gesprungen usw ...
Vor allem verstehe ich den zusammenhang von N nicht so ganz.
:a = sprungziel (a = label)
ba = ein sprung (a = label)
!$ = aber nicht die letzte zeile
N = hänge ein newline an
und das was dabei rauskommt bekommt ein ganz normales /s\n//g
Die frage ist wie das genau funktioniert. Wo kommt was rein, wo wird gesprungen usw ...
Vor allem verstehe ich den zusammenhang von N nicht so ganz.
Code: Alles auswählen
':a;N;$!ba;s/\n//g'
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.
... und Wasser ist naß.