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

时间:2018-03-19 01:03:10

标签: bash shell unix command-line text-processing

我正在解析.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öäüõžš]+)/\2/g'

1 个答案:

答案 0 :(得分:1)

您应该使用cut它更适合您在此处尝试实现的目标。而且你会避免与UTF-8字符挣扎。

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

cut -d ' ' -f 2