特定の数のパスコンポーネントを削除する場合は、を使用cut
する必要があります-d'/'
。たとえば、次の場合path=/home/dude/some/deepish/dir
:
最初の2つのコンポーネントを削除するには:
# (Add 2 to the number of components to remove to get the value to pass to -f)
echo $path | cut -d'/' -f4-
# output:
# some/deepish/dir
最初の2つのコンポーネントを保持するには:
echo $path | cut -d'/' -f-3
# output:
# /home/dude
最後の2つのコンポーネントを削除するには(rev
文字列を逆にします):
echo $path | rev | cut -d'/' -f4- | rev
# output:
# /home/dude/some
最後の3つのコンポーネントを保持するには:
echo $path | rev | cut -d'/' -f-3 | rev
# output:
# some/deepish/dir
または、特定のコンポーネントの前にすべてを削除したい場合は、次のように機能しますsed
。
echo $path | sed 's/.*\(some\)/\1/g'
# output:
# some/deepish/dir
または特定のコンポーネントの後:
echo $path | sed 's/\(dude\).*/\1/g'
# output:
# /home/dude
指定しているコンポーネントを保持したくない場合は、さらに簡単です。
echo $path | sed 's/some.*//g'
# output:
# /home/dude/
また、一貫性を保ちたい場合は、末尾のスラッシュも一致させることができます。
echo $path | sed 's/\/some.*//g'
# output:
# /home/dude
もちろん、複数のスラッシュを一致させる場合は、sed
区切り文字を切り替える必要があります。
echo $path | sed 's!/some.*!!g'
# output:
# /home/dude
これらの例はすべて絶対パスを使用していることに注意してください。相対パスで機能させるには、いろいろと試してみる必要があります。