剪切字符串直到指定字符。巴什

时间:2018-01-04 19:40:47

标签: linux string bash

我正在尝试剪切字符串直到它是第一个指定的字符。 在这种情况下,它是第一个拉丁字母。

我累了。它有点工作但有时会移动一个或多个字符。

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

有更好的方法吗?如果是这样,我们总会欢迎一些解释。

1 个答案:

答案 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:]]可能会匹配错误的字符。