Füge die Konsole am Anfang der Datei hinzu

417
Yuchimenko Igor

Nachgenerieren von fake-module-bpy (für Blender-Python) ... Die Sprache spielt jedoch keine Rolle. Also benutze ich den nächsten Konsolenbefehl

]$ ls | grep -v _init_ | sed -E 's/^([a-zA-Z0-1]+)/import \1/' >> __init__.py 

Es werden alle Python-Dateien als Import in __init__.py geschrieben (Exclude __init__.py).

Kann ich nicht das Ende, sondern den Anfang der Datei schreiben / anfügen?

-2
Ein obligatorischer Link: [* Warum sollten Sie die Ausgabe von `ls (1)` *] (https://mywiki.wooledge.org/ParsingLs) nicht analysieren? :) Kamil Maciorowski vor 5 Jahren 0
Die beiden Fragen sind so verschieden, dass sie separat gestellt werden sollten. Außer der zweite ist bereits [hier] (https://superuser.com/q/246837/432690). Notieren Sie auch eine Antwort auf "Kann ich ...?" ist normalerweise "Ja" oder "Nein"; "wie kann ich…?" würde eine bessere Frage stellen. Kamil Maciorowski vor 5 Jahren 2
-1. Feedback: Trotz meiner Bemerkung lassen Sie die beiden Fragen sein. Jetzt gibt es zwei Antworten, von denen jede eine andere Frage beantwortet. So soll die Site nicht funktionieren. Kamil Maciorowski vor 5 Jahren 0
Jetzt ist es ein Duplikat von [Wie füge ich Text am Anfang einer Datei in Bash hinzu?] (Https://superuser.com/q/246837/432690). Außerdem haben Sie eine der Antworten außerhalb des Themas gemacht, aber dies war der Fall unvermeidlich, es sei denn, Sie ließen die zwei verschiedenen Fragen, die ihre offensichtlichen Nachteile hatten. Das Problem ist, dass es irgendwann keinen Weg ohne Abstriche aus diesem Schlamassel gab. :( Kamil Maciorowski vor 5 Jahren 0

2 Antworten auf die Frage

1
AFH

Alles, was greptut, kann von innen gemacht werden sed: siehe dieses Tutorial . In diesem Fall fügen Sie hinzu -e '/PATTERN/d', um die grep -vOption zu reproduzieren :

ls | sed -E -e '/_init_/d' -e 's/^([a-zA-Z0-1]+)/import \1/' >> __init__.py 

Sie können sie entfernen, lsindem Sie stattdessen Folgendes verwenden:

for f in *; do echo "$f"; done | sed -E -e '/_init_/s' -e 's/^([a-zA-Z0-1]+)/import \1/' >> __init__.py 

Dadurch entfällt die Verwendung eines externen Programms und die Verarbeitung zusätzlicher Informationen oder Flags, die durch lsStandardwerte hinzugefügt werden können .

Es gibt mehrere Möglichkeiten, die Dateien in umgekehrter Reihenfolge hinzuzufügen:

  • Wenn Sie verwenden ls, ls -rwerden die Dateien in umgekehrter Reihenfolge ausgegeben.
  • Wenn Sie verwenden for f in *; ..., leiten Sie die Ausgabe durch sort -r.
  • Sie können die tacZeilenreihenfolge in der Ausgabe anschließend umkehren.
  • Die umständliche Methode besteht darin, jede Datei in einer einzeiligen Datei auszugeben, die aktuelle Ausgabeliste anzufügen und diese dann zu verschieben, um die laufende Ausgabeliste zu überschreiben.
Hinweis: Das OP hat die Frage eingegrenzt und Ihre Antwort nicht zum Thema gemacht. Kamil Maciorowski vor 5 Jahren 0
@ KamilMaciorowski - Naja, die halbe Antwort jedenfalls, aber das Entfernen von "grep" ist ein vernünftiger Teil der Antwort auf die aktuelle Frage, auch wenn es vielleicht nicht das erste ist, was man sagen sollte. Ich habe Ihren Kommentar zur Vermeidung von "ls" berücksichtigt. Ich sah die Frage auch als ein XY-Problem und versuchte zu beantworten, was meiner Meinung nach die eigentliche Frage war. AFH vor 5 Jahren 0
Richtig… Ich wollte Sie nur wissen lassen, dass die Dinge etwas komplizierter wurden. Kamil Maciorowski vor 5 Jahren 0
1
Jan Kozo Vajda

Dies beantwortet Ihre zweite Frage.

Hier ist ein kleiner Trick, um den Inhalt am Anfang der Datei mit zu schreiben sed:

sed -i '1s/^/to start of file\n/' existing_file.txt 

Vielleicht ist es mit einer kleinen Änderung das Richtige für Sie.