从 XML 文件中提取文件名(不带扩展名)

发布于 2024-09-15 11:20:14 字数 425 浏览 4 评论 0原文

当我 grep 查找“Server”时,我有以下 XML 输出:

<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

I have the following XML output when I grep for "Server":

<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"/>

I need to be able to take this output and sed/awk or some other tool, and just get the filename, without the path or extension. So my output would need to be (for this example):

PRX01
PRX02
PRX03
PRX04

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

巴黎夜雨 2024-09-22 11:20:14

对于示例输入数据,以下 sed 脚本将起作用:

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

.*\/ 匹配正斜杠(贪婪)。然后 \(.*\)\.xml 匹配该行的最后一个并获取组中的基本文件名。 \1 告诉它用所有内容替换组中的内容。

For the example input data, the following sed script will work:

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

The .*\/ matches up to a forward slash (greedy). Then \(.*\)\.xml matches the last of the line and grabs the base file name in a group. The \1 tells it to substitute all of that for what was in the group.

风渺 2024-09-22 11:20:14

使用 awk 和 sed 很简单,假设数据位于文件“test.data”中:

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

simple to do with awk and sed, assuming the data is in the file "test.data":

cat test.data | awk 'BEGIN{FS="/"}{print $5}'  | sed 's/\..*//g'
入怼 2024-09-22 11:20:14

可以简化接受的答案,而无需使用无用的 cat 和 sed,

awk '{gsub(/\..*/,"",$5) ;print $5}' file

the accepted answer can be simplified without the useless cat and sed,

awk '{gsub(/\..*/,"",$5) ;print $5}' file
Smile简单爱 2024-09-22 11:20:14
>gawk -F"/" "{ split($5,a,\".\"); print a[1]}" 1.t
PRX01
PRX02
PRX03
PRX04
>gawk -F"/" "{ split($5,a,\".\"); print a[1]}" 1.t
PRX01
PRX02
PRX03
PRX04
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文