回答:
bashの文字列操作の使用:
$ a=/home/myusername/folder1/folder2/folder3
$ echo "${a#/*/*/}"
folder1/folder2/folder3
したがって、必要な文字列は次のようになります(先頭のスラッシュを追加し直します)。
b="/${a#/*/*/}"
変数の場合a、${a#foo}最短の文字列の一致を削除しますfooから開始しますa。そのため/、絶対パスの最初の2つのコンポーネントを削除するために、3つを含む最短の文字列(パスの先頭のスラッシュを含む)を削除します。
以下は使用例です cut
echo "/home/myusername/folder1/folder2/folder3" | cut -d '/' -f4-
folder1/folder2/folder3
行送り/が必要な場合| sed 's/^/\//'は、行の最後に追加できます。
フィールド間の区切り文字として使用するように指示する-f4-ために必要です。したがって、最初のフィールドは最初の区切り文字の前に来ます。この場合、最初のフィールドは空です。だから、4番目のフィールドであり、以降4日からすべてのフィールドを使用するようにカットを伝えます。-d '/'cut/folder1-f4-
次のようにbashパラメーター展開を使用できます。
target_path=/home/username/folder1/folder2/folder3
myvar="/${target_path#/*/*/}"
この後:
echo $myvar
与える:
/folder1/folder2/folder3
シェルパラメーター展開構文/*/*/を使用して、target_path変数からパターンの最初の一致を削除することで機能し${target_path#pattern}ます。残念ながら、これにより最初の/文字が削除されるため、myvar変数の設定中にその文字を明示的に含める必要があります。
警告:このメソッドを使用する前に、target_path変数に文字が含まれており、2つのパスセグメントより長いことを確認する必要があります。たとえばif target_path=/home/username/、then myvar=/。のようなものを実行している場合、これはシステムにとって危険ですrm -rf "$myvar"*。これを試さないでください!
/home/username、実際$HOME起動するユーザーのディレクトリには?もしそうなら、あなたは、単に使用して、それを削除することができmydir="${target_path#$HOME}"、私は思う