
Wenn ich eine Datei mit vielen Verzeichnisinformationen habe wie:
/home/svdev/src/lib
/home/dev/project/doc
/home/server/etc
Ich möchte den Verzeichnisnamen neben dem Verzeichnis "/home" erhalten. Für diesen Datensatz sollte meine Ausgabe also svdev, dev, server sein
Antwort1
$ sed -e 's,^/home/,,' -e 's,/.*,,' file
svdev
dev
server
Dadurch wird sed
zuerst der ursprüngliche /home/
Pfad gelöscht und anschließend alles, was /
im Rest der Zeile nach dem ersten Pfad kommt.
Ich verwende Kommas als Trennzeichen für den s
Befehl, sed
um zu vermeidendas schiefe Zahnstocher-Syndrom.
Ein anderer Ansatz sed
besteht darin, die gesamte Zeile durch das zweite Element dazwischen zu ersetzen /
:
$ sed 's,/[^/]*/\([^/]*\)/.*,\1,' file
svdev
dev
server
Antwort2
Eine sehr grobe Möglichkeit, dies zu tun, besteht darin, cut
einen Schrägstrich als Trennzeichen zu verwenden und anzugeben:
cut -d "/" -f 3 thefile
Ausgabe:
svdev
dev
server
Angenommen, die Verzeichnisse beginnen alle mit/home
Antwort3
wenn Sie die Unterverzeichnisse von /home ausdrucken möchten
find /home -type d -maxdepth 1 -mindepth 1
wenn die Pfade der Inhalt einer Datei sind,
awk -F '/' '{printf "%s, ",$3}' file.txt