如何从var =“./ test3 / test2-test-10.23-67.tar.gz”中删除单词“test2-test”
“test2-test”可以是任何名称, 我怎么能这样做?
答案 0 :(得分:1)
你可以像这样使用子串替换:
var="./test3/test2-test-10.23-67.tar.gz"
echo ${var/test2-test/}
输出:./test3/-10.23-67.tar.gz
更新答案以仅使用字符串替换和basename保留路径中的文件名:
basename ${var/-[0-9]*.*/}
输出:test2-test
答案 1 :(得分:0)
@Carloluis的答案很好,但我认为这个问题没有得到恰当的解决。
@Samresh希望从./test3/test2-test-10.23-67.tar.gz
删除额外部分,以便只剩下 test2-test 。
可以通过以下方式完成 -
basename ./test3/test2-test-10.23-67.tar.gz | sed 's/-[[:digit:]].*//'
'basename'将删除路径,因此只保留文件名(test2-test)。 接下来,sed可以匹配正则表达式。因此,我们匹配版本和文件扩展名,并将其替换为空字符串。
这适用于bash 4.2.46。
答案 2 :(得分:0)
@Avi的回答很好,但有点慢。纯粹的打击:
#!/bin/bash
var="./test3/test2-test-10.23-67.tar.gz"
var=${var##*/}
var=${var%%-[0-9]*}
echo $var
10000次迭代速度快100倍
bash < sed+basename (no builtin command)
129 ms < 13006 ms