次のような多くのディレクトリ情報を含むファイルがある場合:
/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