如何在Bash中提取多个唯一子字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Bash中提取多个唯一子字符串相关的知识,希望对你有一定的参考价值。
摘要:我有一个子字符串提取问题,我刚刚失败了。我有一个字符串,该字符串包含我要提取的人的名字的不确定的多个名称。在字符串中,这些子字符串定义得相当好,但是子字符串的随机数量,子字符串的随机长度以及我的中级Bash技能使我不知所措。
Context:我已使用exiftool从DigiKam处理的文件中提取选中的标签,以生成我的源字符串。我认为这个事实对眼前的问题并不重要,但可以保证完整性。
字符串示例
tagoutput="Tags List : Date/Month/March, Places/Our House, People/FirstName1 LastName1, People/FirstName2 LastName2, Date/Year/2009, Date/Day/22"
tagoutput="Tags List : People/FirstName1 LastName1, Date/Year/1970, Date/Month/Feburary, Places/Grandmas House"
注意:如您所见,在字符串中,事物的格式正确,但可能以随机顺序出现并且数量未知。在上面的每个示例中,List和冒号之间还有一个供参考的FYI,其中有一个很大的空格(〜25个空格),此处张贴的内容会自动删除。
我需要:给定$tagoutput
,我想向控制台回显
FirstName1 LastName1
FirstName2 LastName2
...
对于$tagoutput
中的每个名称。我在“对于目录循环中的每个文件”中拥有此文件,在该文件中,我在细化名称的$tagoutput
前立即提取了$tagoutput
。由于此问题是以文件为中心的,因此我选择使用Bash,但是如果此处的正确答案是使用更适合的语言(如Python),则我不愿意这样做。
答案
使用GNU grep,您可以做:
grep -Po ' People/\K[^,]*' <<< $tagoutput
此匹配每次出现的People/
(以空格开头),并在其后提取零个或多个非逗号字符。
以上是关于如何在Bash中提取多个唯一子字符串的主要内容,如果未能解决你的问题,请参考以下文章