
次のようなディレクトリ情報が多数含まれるファイルがあるとします。
/home/svdev/src/lib
/home/dev/project/doc
/home/server/etc
「/home」ディレクトリの次のディレクトリ名を取得したい。このデータセットの場合、出力はsvdev、dev、serverとなる。
答え1
$ sed -e 's,^/home/,,' -e 's,/.*,,' file
svdev
dev
server
これは、sed
最初に最初の/home/
パスを削除し、次に/
行の残りの最初のパスの後に続くすべてのものを削除するために使用されます。
s
私はコマンドの区切り文字としてカンマを使用していますsed
。傾いたつまようじ症候群。
の別のアプローチは、sed
行全体を次の 2 番目の項目に置き換えることです/
。
$ sed 's,/[^/]*/\([^/]*\)/.*,\1,' file
svdev
dev
server
答え2
cut
スラッシュを区切り文字として使用して指定する非常に大雑把な方法:
cut -d "/" -f 3 thefile
出力:
svdev
dev
server
ディレクトリがすべて/home
答え3
/homeのサブディレクトリを印刷したい場合
find /home -type d -maxdepth 1 -mindepth 1
パスがファイルの内容である場合、
awk -F '/' '{printf "%s, ",$3}' file.txt