joebloggs
追加のプロセスなしでパラメーター拡張を使用して bash でこの文字列から抽出するには...
MYVAR="/var/cpanel/users/joebloggs:DNS9=domain.com"
NAME=${MYVAR%:*} # retain the part before the colon
NAME=${NAME##*/} # retain the part after the last slash
echo $NAME
joebloggs
パスの特定の深さに依存しません。
概要
参照用に、いくつかのパラメーター拡張モードの概要...
${MYVAR#pattern} # delete shortest match of pattern from the beginning
${MYVAR##pattern} # delete longest match of pattern from the beginning
${MYVAR%pattern} # delete shortest match of pattern from the end
${MYVAR%%pattern} # delete longest match of pattern from the end
したがって#
、最初から一致することを意味し (コメント行を考えてください) %
、最後から一致することを意味します。1 つのインスタンスは最短を意味し、2 つのインスタンスは最長を意味します。
数値を使用して、位置に基づいて部分文字列を取得できます。
${MYVAR:3} # Remove the first three chars (leaving 4..end)
${MYVAR::3} # Return the first three characters
${MYVAR:3:5} # The next five characters after removing the first 3 (chars 4-9)
以下を使用して、特定の文字列またはパターンを置き換えることもできます。
${MYVAR/search/replace}
はpattern
ファイル名の一致と同じ形式であるため、 (任意の文字) が一般的で、多くの場合、または*
のような特定の記号が続きます。/
.
例:
次のような変数が与えられた場合
MYVAR="users/joebloggs/domain.com"
ファイル名を残してパスを削除します (スラッシュまでのすべての文字):
echo ${MYVAR##*/}
domain.com
ファイル名を削除し、パスを残します (最後の最短一致を削除します/
):
echo ${MYVAR%/*}
users/joebloggs
ファイル拡張子だけを取得します (最後のピリオドより前のすべてを削除します):
echo ${MYVAR##*.}
com
注: 2 つの操作を行うには、それらを結合することはできませんが、中間変数に代入する必要があります。したがって、パスまたは拡張子なしでファイル名を取得するには:
NAME=${MYVAR##*/} # remove part before last slash
echo ${NAME%.*} # from the new var remove the part after the last period
domain