path変数があります/usr/apps/app1/home/usera/run/10/_tmp/folder1/folder1
。/usr/apps/app1/home/usera/run/10/_tmp
シェルスクリプトから抽出する方法は?
答え1
シェルを使うパラメータ拡張:
dir=/usr/apps/app1/home/usera/run/10/_tmp/folder1/folder1
echo "${dir%/*/*}"
/usr/apps/app1/home/usera/run/10/_tmp
パラメータ拡張拡張パラメータ:$foo
、、$1
。これを使用して文字列または配列操作を実行できます"${file%.mp3}"
。彼らは"${0##*/}"
"${files[@]: -4}"
いつも引用してください。
望むより:http://mywiki.wooledge.org/BashFAQ/073そして
LESS='+/Parameter Expansion' man bash
また参照http://wiki.bash-hackers.org/syntax/pe
答え2
zsh シェルで、次の操作を行います。
dir=/usr/apps/app1/home/usera/run/10/_tmp/folder1/folder1
到着
newdir=/usr/apps/app1/home/usera/run/10/_tmp
最後に2つのパスコンポーネントを削除する場合:
newdir=$dir:h:h
cshと同様に、パスのh
先頭を取得するために履歴を使用します。h
:h
修飾子これはパラメータ拡張に適用されます。
パスの最初の9つのコンポーネントをインポートするには、次の手順を実行します。
newdir=${dir:h9}
一番左の項目にすべてを追加する場合/_tmp
:
newdir=${(M)dir#*/_tmp}
一番右の場合:
newdir=${(M)dir##*/_tmp}
${var#pattern}
マッチングを開始すると、それぞれが${var##pattern}
最短文字列と最長文字列の値に展開される Korn シェルの演算子です。とともに$var
pattern
M
パラメータ拡張フラグ、取り外す代わりにM
取り付けられた部分まで延びます。
csh
1 は zsh が提供するものと同じように動作しますが、csh はdir=/usr/apps/app1/home/usera/run/10/_tmp/folder1/folder1/
ksh と同様に、対応する末尾の s を追加のパスコンポーネントとして扱います。dir=/usr/apps/app1/home/usera/run/10/_tmp/folder1/folder1//
/
${dir%/*/*}
答え3
使用dirname
:
dir=/usr/apps/app1/home/usera/run/10/_tmp/folder1/folder1
dirname -- "$(dirname -- "$dir")"
/usr/apps/app1/home/usera/run/10/_tmp
答え4
パス変数に改行(\ n)がないと仮定すると、sedを使用してこれを実行できます。
$ A=/usr/apps/app1/home/usera/run/10/_tmp/folder1/folder1
$ cutoff=/folder1/folder
$ echo "$A" | sed "s#$cutoff##"
/usr/apps/app1/home/usera/run/10/_tmp1
(文字列にスラッシュが含まれているため、sedで別の区切り文字を使用する必要があります。カットオフ変数に存在しない区切り文字を選択してください)