我正在尝试剪切字符串直到它是第一个指定的字符。 在这种情况下,它是第一个拉丁字母。
我累了。它有点工作但有时会移动一个或多个字符。
f=$(echo $f | tail -c $((${#f}+-$(expr index "$f" [azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN])+2)))
以此字符串为例:ã%82¹ã%83%91ã%83¼ã%82¯ã%83«__original_ver.__-Your_name.mp3
我想得到:original_ver.__-Your_name.mp3
我倾向于这样做:ver.__-Your_name.mp3
有更好的方法吗?如果是这样,我们总会欢迎一些解释。
答案 0 :(得分:1)
您可以使用extended globbing:
f=$(shopt -s extglob; LC_ALL=C; echo "${f##+([^[:alpha:]])}")
f=$(shopt -s extglob; LC_ALL=C; echo "${f/#+([^[:alpha:]])}")
或sed
:
f=$(LC_ALL=C sed -r 's/^[^[:alpha:]]+//' <<< "$f")
将LC_ALL
设置为C
是强制性的,否则[[:alpha:]]
可能会匹配错误的字符。