Extrahieren Sie den Dateinamen mit einem Shell-Skript aus der Datei

1793
Grv

Ich habe eine Textdatei mit der folgenden Zeile:

/u/tux/abc/spool/frtbla_mcdetc_0000149099_20101126135009990_1.tif 

Ich möchte extrahieren frtbla_mcdetc_0000149099_20101126135009990_1.tif; das Wort nach dem letzten Schrägstrich ( /).

0
Wenn Sie offen für die Verwendung von Excel sind, können Sie dies ganz einfach erreichen - "ohne VB-Skript". Prasanna vor 9 Jahren 0

5 Antworten auf die Frage

1
cYrus

Wenn Sie sich in einer Linux-ähnlichen Umgebung befinden, können Sie das basenameDienstprogramm verwenden:

basename $(<your_file) 
danke .. ich kam mit der methode .. zuerst entfernte ich alle "/" als benutzte den letzten parameter..aber deine ist die beste .. Grv vor 9 Jahren 0
0
psycho3

Verwenden Sie diesen Befehl

cat text_file_name | cut -d '/' -f 6 
Sieht aus, als hätten wir beide gleichzeitig geantwortet! Nur zur eigenen Erbauung arbeitet cut direkt mit Dateien. Oft fällt das einfache "cat" einer Datei unter das, was recht begründet als "nutzlose Verwendung von" cat "(http://www.smallo.ruhr.de/award.html)" bekannt ist. es sei denn, Sie betrachten die Datei oder ähnliches (obwohl Sie wieder "less" verwenden könnten) bertieb vor 9 Jahren 0
@bertieb hat es geschätzt psycho3 vor 9 Jahren 0
0
bertieb

Wenn Sie das genaue Format der Verzeichnisstruktur kennen und sich nicht ändern, können Sie Folgendes verwenden cut:

$ cut -f6 -d '/' file.txt 

Hier werden mit cut die Verzeichnisseparatoren als Trennzeichen behandelt und das sechste extrahiert.

Wenn Sie stattdessen nur den letzten Teil einer Zeile kennen, aber die Verzeichnisstruktur nicht kennen, können Sie auch Folgendes verwenden rev:

$ rev file.txt | cut -f1 -d '/' | rev 

Hier wird die Datei umgekehrt und das erste Feld wird extrahiert, bevor es wieder umgekehrt wird.

0
qasdfdsaq

Folgendes gilt für alle Zeichenfolgen in einer Shell, nicht nur für Dateinamen, und ist weitaus einfacher als das Ausschneiden, da Sie nicht wissen müssen, wie viele Felder vor dem gewünschten Feld vorhanden sind:

$ foo=/path/to/file/split/by/slashes.txt $ echo $ slashes.txt 

Hierbei wird der 'gierige Schnitt' verwendet, dh alles bis zum letzten '/' wie hier beschrieben abschneiden:

https://stackoverflow.com/questions/3162385/how-to-split-a-string-in-shell-and-get-the-last-field

$ 
0
AFH

Ich weiß nicht, was die Standardshell in Aix ist, aber sie bashist verfügbar und unterstützt die bearbeitete Erweiterung von Variablen.

Wenn sich Ihr vollständiger Name in der Variablen befindet FileName, $wird der Name mit allen führenden Zeichen bis zum letzten Zeichen angezeigt /. hingegen $löscht auf den ersten bis /, während $Löschungen Zeichen aus dem letzten nachlauf /(dh dem Verzeichnispfad).

Wenn Sie die Dateinamen durch einen findBefehl generieren, benötigen Sie einen Befehl wie:

find ... | while read FileName; do echo $; done 

Wenn in einer Textdatei:

while read FileName; do echo $; done < FileList.txt 

Ersetzen Sie den echoBefehl durch die Verarbeitung, die Sie mit dem Namen ausführen müssen.

(Ich habe mich anscheinend mit anderen Antworten gekreuzt, aber ich lasse meine Antwort stehen, da Teile davon an anderer Stelle nicht behandelt werden.) AFH vor 9 Jahren 0