(gelöst) sed verstehen

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
Antworten
guennid

(gelöst) sed verstehen

Beitrag von guennid » 08.02.2014 19:35:59

Gehe ich recht in der Annahme, dass das folgende Kommando in allen Dateien im aktuellen Verzeichnis alle Ausdrücke "info" durch "ULOG" ersetzen soll?

Code: Alles auswählen

# sed -i 's/info/ULOG/g' *
Im Verzeichnis gibt es Daeien, in denen "info" als einzelnes Wort vorkommt. Die Ausdrücke wurden aber nicht ersetzt.

sed meldete:

Code: Alles auswählen

sed: couldn't edit orig: not a regular file
Kann mich jemand aufklären?

Grüße, Günther
Zuletzt geändert von guennid am 09.02.2014 12:02:09, insgesamt 1-mal geändert.

Benutzeravatar
4A4B
Beiträge: 926
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: sed verstehen

Beitrag von 4A4B » 08.02.2014 19:52:26

Was ist "orig" denn für eine Datei - ein Verzeichnis?

Um nur reguläre Dateien zu ersetzen, würde ich folgendes (im aktuellen Verzeichnis) probieren:

Code: Alles auswählen

find ./ -type f -exec sed -i 's/info/ULOG/g' {} \;

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

Re: sed verstehen

Beitrag von Cae » 08.02.2014 19:55:05

Vielleicht ist das ein Verzeichnis (naheliegend) oder auch ein (versehentlicher (?) Symlink auf ein) Blockdevice oder eine FIFO. Ein Verzeichnis kannst du rekursiv mit find durchlaufen, mein Vorposter hat schon eine Musterloesung dafuer geschrieben (ausser, dass man \; noch durch + ersetzen koennte, was es etwas effizienter macht).

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

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: sed verstehen

Beitrag von wanne » 08.02.2014 20:03:47

Ich glaube du hast eher problem mit der bash als mit sed.
Die bash ersetzt den * durch die ausgabe von ls -a .
rot: Moderator wanne spricht, default: User wanne spricht.

guennid

Re: sed verstehen

Beitrag von guennid » 08.02.2014 20:15:09

Au Mann, wer diese Syntax verbrochen hat, gehört eigentlich bestraft wie jemand, der Vater und Mutter umgebracht hat :evil:

Zur Sache:
orig ist ein von mir vor Urzeiten angelegtes Verzeichnis, in dem ich Dateien als Sicherheitskopien aufbewahrte (die ich nie wieder angerührt habe 8) ). Das sollte auch nicht angerührt werden. Aber wer oder was sagt sed, dass es da nicht dran darf? Woher weiß dieses Teil (sed) dass das keine "reguläre" Datei ist, was immer auch eine reguläre Datei sein mag. Ich hab's ihm mit Wissen nicht gesagt.

Würde es funktionieren, wenn ich alles, was ich an Dateien/Verzeichnissen selbst dort angelegt habe, aus dem Verzeichnis entfernte?

@wanne
dann habe ich wahrscheinlich schon zwei Probleme, von denen ich null Ahnung habe.

@ 4A4B
Ich weiß immer ganz gerne, was ich so tue. Hättest du die Zeit und die Muße, mir deinen Vorschlag einschließlich aller kryptischen Zeichen zu erklären?

Eingentlich wollte ich ja "nur" shorewall mit einem bestimmten Eigenbaukern zum Laufen bringen. siehe hier

Grüße, Günther

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: sed verstehen

Beitrag von wanne » 08.02.2014 20:28:33

Wie immer: Was willst du machen?
* es heist eben häng mal die namen von allen dateien und ordnern hinten an.
Die syntax ist primitiv. Du musst halt hinten anhängen in welchen Datein du ersetzt haben willst.
rot: Moderator wanne spricht, default: User wanne spricht.

guennid

Re: sed verstehen

Beitrag von guennid » 08.02.2014 20:35:47

Du musst halt hinten anhängen in welchen Datein du ersetzt haben willst.
Eben das wollte mir der Befehl doch eigentlich ersparen, wenn ich recht sehe. Also ich sehe zwei Möglichkeiten: Entweder ich entferne alles Selbsterstellte im fraglichen Verzeichnis und probiere dann den sed-Befehl (der ja nicht von mir stammt) noch einmal, oder ich klappere die Dateien, die in Frage kommen, mit einem Editor händisch ab. Dann brauche ich kein "sed". Dann kann ich das "info" auch direkt ersetzen. Sollte ich Alternative1 probieren? (Ginge wohl schneller, wenn sie funktioniert).

Grüße, Günther
Zuletzt geändert von guennid am 08.02.2014 20:40:58, insgesamt 1-mal geändert.

Benutzeravatar
4A4B
Beiträge: 926
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: sed verstehen

Beitrag von 4A4B » 08.02.2014 20:39:26

guennid hat geschrieben:@ 4A4B
Ich weiß immer ganz gerne, was ich so tue. Hättest du die Zeit und die Muße, mir deinen Vorschlag einschließlich aller kryptischen Zeichen zu erklären?

Code: Alles auswählen

find # suche
./ # im aktuellen Verzeichnis
-type f # reguläre Dateien
-exec # führe mit diesen folgenden Befehl aus:
sed -i 's/info/ULOG/g' {} # {} wird hierbei ersetzt durch die gefundenen Dateien
\; # markiert das Ende des Befehls; das "\" ist notwendig, damit die Shell das ";" an find weiterreicht
... wobei hierbei auch Dateien innerhalb von Unterverzeichnissen, also auch unterhalb von orig ersetzt werden; mit "-maxdepth 1" sollten nur Dateien außerhalb der Unterverzeichnisse gefunden werden:

Code: Alles auswählen

find ./ -maxdepth 1 -type f -exec sed -i 's/info/ULOG/g' {} \;

guennid

Re: sed verstehen

Beitrag von guennid » 08.02.2014 20:42:55

@4A4B: :THX:

Antworten