从 XML 文件中提取文件名(不带扩展名)
当我 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
对于示例输入数据,以下 sed 脚本将起作用:
.*\/
匹配正斜杠(贪婪)。然后\(.*\)\.xml
匹配该行的最后一个并获取组中的基本文件名。\1
告诉它用所有内容替换组中的内容。For the example input data, the following sed script will work:
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.使用 awk 和 sed 很简单,假设数据位于文件“test.data”中:
simple to do with awk and sed, assuming the data is in the file "test.data":
可以简化接受的答案,而无需使用无用的 cat 和 sed,
the accepted answer can be simplified without the useless cat and sed,