我在bash中有这样的字符串:*_*_*_*
其中*可以是任意数量的字母,数字和合法字符。
我需要将字符串截断为*_*
。
一个例子是:00001_99_AA_FLLLA -----> 00001_99
我怎样才能在bash中执行此操作?
答案 0 :(得分:1)
使用参数扩展:
while [[ $string = *_*_* ]] ; do
string=${string%_*}
done
${string%_*}
从$ string 答案 1 :(得分:0)
如果s
是您的字符串,请尝试:
x=_${s#*_*_}
s=${s%$x}
这种方法有两个优点:(1)它不需要任何可以使其快速的循环,以及(2)它是POSIX,因此可移植到任何POSIX兼容的shell。
$ s=00001_99_AA_FLLLA
$ x=_${s#*_*_}; s=${s%$x}
$ echo "$s"
00001_99
此代码分为两步:首先,我们找到要从s
中删除的字符串,然后将其删除。更详细:
x=_${s#*_*_}
这会将x
设置为我们要从s
中删除的字符串。 ${s#*_*_}
从s
中删除包含两个下划线的最短字符串。 _${s#*_*_}
在其前面加上了下划线
串。使用我们的示例:
$ s=00001_99_AA_FLLLA; echo "_${s#*_*_}"
_AA_FLLLA
s=${s%$x}
这会从字符串$x
的末尾删除s
。这给了我们正在寻找的东西。使用我们的示例:
$ echo "${s%$x}"
00001_99