Linux-Mustersuche

Linux-Mustersuche

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 sedzuerst 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 sBefehl, sedum zu vermeidendas schiefe Zahnstocher-Syndrom.

Ein anderer Ansatz sedbesteht 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, cuteinen 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

verwandte Informationen