このような文字列がありますが、rev00000010
最後の数字だけが必要です。この場合は10です。
私はこれを試しました:
TEST='rev00000010'
echo "$TEST" | sed '/^[[:alpha:]][0]*/d'
echo "$TEST" | sed '/^rev[0]*/d'
正規表現は正しいようですが、どちらも何も返しません。正規表現)
答え1
渡すコマンドの意味はsed
次のとおりです。行が正規表現と一致する場合は削除します。。それはあなたが望むものではありません。
echo "$TEST" | sed 's/rev0*//'
これは次のことを意味します。各行からrevを削除し、その後にいくつかのゼロを付けます。
sed
そしてそれほど単純なことは必要ありません。ちょうどbashを使用してください。パラメータ拡張:
shopt -s extglob # Turn on extended globbing.
echo "${TEST##rev*(0)}" # Remove everything from the beginning up to `rev`
# followed by the maximal number of zeroes.
答え2
POSIX的に:
test='rev00000010'
number=${test#"${test%%[1-9]*}"}
一番左のゼロ以外の数字の左側の内容はすべて削除されます。
バーンリー/ユニバーサル:
number=`expr "x$test" : 'xrev0*\(.*\)'`
答え3
TEST変数がすでに存在する場合は、それを印刷してすべての文字を削除してください。
printf "%.0f\n" ${TEST//[a-z]/}
または
printf "%g\n" ${TEST//[a-z]/}
先頭の数字は次のように解釈されるため、%d
or echo
- コマンドを使用しないでください。0
octal
答え4
「最後の数字」を取得するには、文字列の末尾にある一連の数字を選択して10進数に変換します。
強打の使用:
[[ "$test" =~ ([1-9][0-9]*)$ ]] && echo "number: $((10#${BASH_REMATCH[1]}))"
grepを使用してください:
echo "$test" | grep -Po "[1-9][0-9]*$"