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