2010-08-18 234 views
0

我有以下XML输出,当我用grep“服务器”:提取文件名(不含扩展名)

<Server id="1" src="/other/Server/PRX01/PRX01.xml"/> 
<Server id="2" src="/other/Server/PRX01/PRX02.xml"/> 
<Server id="3" src="/other/Server/PRX01/PRX03.xml"/> 
<Server id="4" src="/other/Server/PRX01/PRX04.xml"/> 

我需要能够借此输出和SED/AWK或一些其他工具,只需获取文件名,不需要路径或扩展名。所以,我的输出将需要(在这个例子中):

PRX01 
PRX02 
PRX03 
PRX04 
+0

如果源是一个XML文件,关于使用XSLT/XPath的是什么?你在做什么操作系统? – AlG 2010-08-18 18:22:51

回答

1

简单使用awk和sed做,假设数据是在文件“test.data”:

cat test.data | awk 'BEGIN{FS="/"}{print $5}' | sed 's/\..*//g' 
+0

正是我需要的 - 谢谢! :) – drewrockshard 2010-08-18 20:10:31

2

对于例如输入数据,以下sed脚本将工作:

sed -e 's/.*\/\(.*\)\.xml.*/\1/g' t.tmp 

.*\/比赛长达一个斜杠(贪婪)。然后\(.*\)\.xml与该行的最后一个匹配,并抓取组中的基本文件名。 \1告诉它用它代替组中的所有内容。

0

接受的答案可以在没有无用的猫被简化和sed,

awk '{gsub(/\..*/,"",$5) ;print $5}' file 
0
>gawk -F"/" "{ split($5,a,\".\"); print a[1]}" 1.t 
PRX01 
PRX02 
PRX03 
PRX04