文字列で最初の3つのフォルダを切り取るには?
たとえば、
echo "/home/source/Oracle/test" |cut -d'/' -f4
フォルダ名は 1 つだけ指定されますが、次の最大 3 番目のフォルダが必要です。
echo "/home/test/var/opt" | ... command here ...
返す必要があります/home/test/var
答え1
使用cut -d "/" -f1-4
ebvjr@Maintenance:~$ echo /home/test/var/opt | cut -d "/" -f1-4
/home/test/var
答え2
cut
@ebvjrが言ったように良いです。最初のフィールドが空なので、4つのフィールドが必要であることを覚えておいてください。
その場合grep
、コードは長くなりますが、おそらくより直感的になります({3}
= 3番目のサブフォルダ)。
grep -Po "(/[^/]+){3}" <<<"/home/test/var/opt"
/home/test/var
答え3
私は次のawkメソッドを使ってこれをしました。
注文する
echo "/home/test/var/opt"| awk -F "/" 'OFS="/"{print $1,$2,$3,$4}'
出力
/home/test/var
答え4
通常、パス名は行ベースのテキスト編集ユーティリティではなく、ユーティリティおよびbasename
/またはパラメータ置換によって変更されます。dirname
cut
sed
これは、技術的には、パス名に改行文字を含めることができるため(またはまたはなど)などの行ベースのツールを使用して安定して作業することが困難であるためですawk
。
あなたが持っている例は、親ディレクトリのパス名を取得することです/home/test/var/opt
。これを行う方が良い
dirname /home/test/var/opt
これで返すことができます/home/test/var
。これは、指定されたパス名の/
末尾にある場合にも機能します。