このエコー「/home/test/var/opt」で最初の3つのフォルダを切り取る方法は? "/home/test/var" 結果が必要です。

このエコー「/home/test/var/opt」で最初の3つのフォルダを切り取る方法は? "/home/test/var" 結果が必要です。

文字列で最初の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

cutsedこれは、技術的には、パス名に改行文字を含めることができるため(またはまたはなど)などの行ベースのツールを使用して安定して作業することが困難であるためですawk

あなたが持っている例は、親ディレクトリのパス名を取得することです/home/test/var/opt。これを行う方が良い

dirname /home/test/var/opt

これで返すことができます/home/test/var。これは、指定されたパス名の/末尾にある場合にも機能します。

関連情報