我想用sed
命令行工具解析不同类型的Java档案。
档案可以有以下扩展名:
.jar
,.war
,.ear
,.esb
我想要的是没有扩展名的名称,例如对于Foobar.jar
,我想获得Foobar
。
这看起来相当简单,但我无法想出一个有效的解决方案。
我尝试了sed s/\.+(jar|war|ear|esb)$//
的某些内容,但无法使其正常工作。
答案 0 :(得分:1)
使用sed:
s='Foobar.jar'
sed -r 's/\.(jar|war|ear|esb)$//' <<< "$s"
Foobar
OR 最好在BASH本身:
echo "${s/.[jwe]ar/}"
Foobar
答案 1 :(得分:1)
如果您不添加|
或()
'
和-r
并添加-E
echo "test.jar" | sed 's/\.\(jar\|war\|ear\|esb\)$//'
test
*
也不需要,正常情况只有一个.
答案 2 :(得分:1)
你快到了那里:
sed -E 's/\.+(jar|war|ear|esb)$//' file
只需要将-E
标志添加到sed来解释表达式。当然,尊重sed 's/something/new/'
语法。
$ cat a
aaa.jar
bb.war
hello.ear
buuu.esb
hello.txt
$ sed -E 's/\.+(jar|war|ear|esb)$//' a
aaa
bb
hello
buuu
hello.txt
答案 3 :(得分:0)
在传统UNIX上(使用AIX / KSH测试)
File='Foobar.jar'
echo ${File%.*}
来自仅包含您的文件类型的列表
YourList | sed 's/\....$//'
形成所有类型文件的列表
YouList | sed -n 's/\.[jew]ar$/p
t
s/\.esb$//p'