Ich habe gelernt, über sed und finde es sehr nützlich, aber kann keine Antwort auf diese in vielen der Führer und Beispiele ... Ich möchte den Dateinamen einfügen eine Textdatei ohne Pfad und Erweiterung in eine bestimmte Zeile innerhalb des Textes. Möglich?Dateinamen in Textdatei mit sed einfügen
Antwort
In solchen Fällen sollte der richtige Startpunkt man-Seiten sein. Handbuch von sed bietet keine Funktion für sed, um "Dateiname" zu verstehen, aber sed unterstützt das Einfügen eines Textes vor/nach einer Zeile.
Als Ergebnis müssen Sie den Dateinamen separat isolieren, speichern Sie den Text auf eine Variable und injizieren Sie diesen Text nach/vor der gewünschten Zeile.
Beispiel:
$ a="/home/gv/Desktop/PythonTests/cpu.sh"
$ a="${a##*/}";echo "$a"
cpu.sh
$ a="${a%.*}"; echo "$a"
cpu
$ cat file1
LOCATION 0 X 0
VALUE 1a 2 3
VALUE 1b 2 3
VALUE 1c 2 3
$ sed "2a $a" file1 # Inject the contents of variable $a after line2
LOCATION 0 X 0
VALUE 1a 2 3
cpu
VALUE 1b 2 3
VALUE 1c 2 3
$ sed "2i $a" file1 # Inject the contetns of variable $a before line2
LOCATION 0 X 0
cpu
VALUE 1a 2 3
VALUE 1b 2 3
VALUE 1c 2 3
$ sed "2a George" file1 #Inject a fixed string "George" after line 2
LOCATION 0 X 0
VALUE 1a 2 3
George
VALUE 1b 2 3
VALUE 1c 2 3
Erläuterung:
a="${a##*/}"
: Entfernt alle Zeichen vom Anfang der Zeichenfolge oben gefunden Slash zum letzten/(länger Spiel)
a="${a%.*}"
: Alle Zeichen löschen Ende des Start String bis zum ersten gefundenen Punkt. (kurzes Spiel) Sie können %% auch für den am längsten gefundenen Punkt verwenden.
sed "2a $a"
: Legen Sie nach der Zeile 2 der Inhalt der Variable $ a
sed "2i $q"
: Legen Sie vor Zeile 2 den Inhalt von $ a
Optional können Sie sed -i
verwenden, um Änderungen an Ort und Stelle/in Datei unter Prozess
wrt I've been learning about sed
dann haben Sie vielleicht Ihre Zeit verschwendet, da es nicht viel über sed über s/old/new
hinaus zu lernen gibt. Natürlich gibt es eine Menge anderer Sprachkonstrukte und Dinge, die Sie mit sed machen könnten, aber in der Praxis sollten Sie sie alle vermeiden und stattdessen einfach awk verwenden. Wenn Sie Ihre Frage so bearbeiten, dass sie eine prägnante, testbare Beispieleingabe und eine erwartete Ausgabe enthält und ein awk-Tag hinzufügt, können wir Ihnen zeigen, wie Sie alles tun können, was Sie wollen, um den richtigen Weg zu gehen.
Inzwischen klingt es wie alles, was Sie brauchen, ist:
$ cat /usr/tmp/file
a
b
c
d
e
$ awk 'NR==3{print gensub(/.*\//,"",1,FILENAME)} 1' /usr/tmp/file
a
b
file
c
d
e
Die oben genannten Einsätze der aktuellen Dateinamen vor Zeile 3 der geöffneten Datei. Es verwendet GNU awk für gensub(), mit anderen awks verwenden Sie einfach sub() und eine Variable.
- 1. Separate eine Textdatei mit sed
- 2. Nummern mit sed in Linux einfügen?
- 3. sed Übereinstimmung in bestimmten Spalte in Textdatei?
- 4. Einfügen in Textdatei leer
- 5. Dateinamen in die Datenbank einfügen
- 6. Textdatei in existierende xlsx mit Python einfügen
- 7. Datum mit dem Befehl sed einfügen
- 8. löschen erste Zeile von Textdatei in Windows mit sed
- 9. Einfügen Zeichenfolge mit Schrägstrichen in bestimmten Zeile mit sed
- 10. Einfügen einen Dateinamen Postgres Tabelle
- 11. Bash: Einfügen von Sonderzeichen Text nach Zeichenfolge in Textdatei
- 12. Kann sed Text mit Zeilenumbrüchen in anderen Text einfügen?
- 13. Dateinamen beim Laden in SQL Server einfügen
- 14. Mit sed Strings aus einer Textdatei zu extrahieren
- 15. Wie bekomme ich eine Variable aus einer Textdatei mit sed?
- 16. Inhalt in Powershell in Textdatei einfügen
- 17. Verwenden sed alle führenden/nachgestellten Leerzeichen in einer Textdatei
- 18. Einfügen in eine Textdatei ohne Anführungszeichen
- 19. Wie drei aufeinanderfolgende Zeilen Textdatei in Sed kombinieren?
- 20. Ersetzen Sie ein Wort in einer Textdatei mit dem gesamten Inhalt einer anderen Datei - sed
- 21. sed Zeile mit Leerzeichen auf eine bestimmte Zeile einfügen
- 22. Verwenden Sie sed, um den Dateinamen vom vollständigen Pfad abzurufen?
- 23. grep Rohr mit sed
- 24. Kann nicht eine neue Zeile und Registerkarte mit sed einfügen
- 25. Sed übergibt Dateinamen von Bash, aber friert ein
- 26. sed arbeitet für einen hartcodierten Dateinamen, aber nicht für eine Variable, die den Dateinamen enthält
- 27. wie einen Zeilenvorschub in eine Sed Linie Verkettung einfügen
- 28. sed: Wie lösche ich die ersten 100 Zeilen einer Textdatei
- 29. Concat mehrere Dateien mit SED
- 30. Durchschleifen Dateien in einem Ordner und Dateinamen in Tabelle einfügen
Ich empfehle, mehr Informationen über die Umwelt bereitzustellen. Ich prophezeie Lösungsvorschläge über Shell-Variablenaustausch. Bitte geben Sie die Art der Shell an, die Sie verwenden. Auch andere Informationen können helfen, vielleicht konsultieren (http://stackoverflow.com/help/mcve). – Yunnosch
Ja, tut mir leid. Linux Ubuntu 16.04.2 und GNU sed 4.2.2 – raysa