正则表达式与sed解析存档名称

时间:2014-01-22 10:05:45

标签: regex sed

我想用sed命令行工具解析不同类型的Java档案。

档案可以有以下扩展名:
.jar.war.ear.esb

我想要的是没有扩展名的名称,例如对于Foobar.jar,我想获得Foobar

这看起来相当简单,但我无法想出一个有效的解决方案。

我尝试了sed s/\.+(jar|war|ear|esb)$//的某些内容,但无法使其正常工作。

4 个答案:

答案 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'