文本处理 - 如何使用 sed 从搜索结果中删除部分字符串?

Text Processing - how to remove part of string from search results using sed?

我正在解析 .xml 个文件以查找 HTML 标签内的名称。 我找到了我需要的东西,但我只想保留姓氏。

这是我到目前为止所拥有的(grep命令名称+清理结果,包括删除标签和文件名,稍后我将对它们进行排序并只留下唯一的名称):

grep -oP '<name>([A-ZÖÄÜÕŽS][a-zöäüõžš]*)[\s-]([A-ZÖÄÜÕŽS][a-zöäüõžš]*)</name>' *.xml --colour | sed -e 's/<[^>]*>//g' | sed 's/la[0-9]*//' | sed  's/$*.xml://' 

输出如下所示:

Mart Kreos
Hans Väär
Karel Väär
Jaan Tibbin
Jüri Kull

我想保留姓氏,但删除名字。

我尝试使用以下命令,但它只对某些名称有效,对其他名称无效:

sed -r 's/([A-ZÖÄÜÕŽŠ][a-zöäüõžš]+[ ])([A-ZÖÄÜÕŽS][a-zöäüõžš]+)//g'

你应该使用 cut. 它更适合你在这里想要实现的目标。而且您将避免与 UTF-8 字符纠缠不清。

这将为您的示例输出中的所有名称提供预期的结果:

cut -d ' ' -f 2