ptm*_*ish 6 grep text-processing
有没有人会指导我从下面的单个字符串中只搜索包含模式 _ARA 的单词。
细绳:
LINK:['IM219MIR_ARA1','IM18Q4_ARA1','SM18Q4_ARA1','IM18PLANNING_ARA1','IM118Q4DYNVA_ARA1','IM218Q4DYNVA_ARA1','IM119EIOPALTG_ARA1','IM219EIOPALTG_ARA1','SM119EIOPALTG_ARA1']}
Run Code Online (Sandbox Code Playgroud)
预期输出:
IM219MIR_ARA1
IM18Q4_ARA1
SM18Q4_ARA1
IM18PLANNING_ARA1
IM118Q4DYNVA_ARA1
IM218Q4DYNVA_ARA1
IM119EIOPALTG_ARA1
IM119EIOPALTG_ARA1
IM219EIOPALTG_ARA1
SM119EIOPALTG_ARA1
Run Code Online (Sandbox Code Playgroud)
grep接受-o仅在单独的行上打印匹配的文本,即使匹配来自同一行。它还接受-w强制正则表达式匹配整个单词(或根本不匹配),其中单词是字母、数字和下划线的最大序列。所以你可以简单地使用:
grep -ow '\w*_ARA\w*'
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您实际上可以根据需要省略该-w选项,并获得相同的结果,因为此处的正则表达式仅显式匹配带有\w.
这将从标准输入读取,因为没有文件名参数。如果你显示的文本在一个文件中——比如说,叫做——input.txt那么你可以将它作为参数传递:
grep -ow '\w*_ARA\w*' input.txtRun Code Online (Sandbox Code Playgroud)
这输出:
IM219MIR_ARA1
IM18Q4_ARA1
SM18Q4_ARA1
IM18PLANNING_ARA1
IM118Q4DYNVA_ARA1
IM218Q4DYNVA_ARA1
IM119EIOPALTG_ARA1
IM219EIOPALTG_ARA1
SM119EIOPALTG_ARA1
Run Code Online (Sandbox Code Playgroud)
从技术上讲,这产生的输出与您在问题中显示的输出略有不同,因为您显示的预期输出列出了IM119EIOPALTG_ARA1两次,即使它在您显示的文本中只出现一次。我认为这是一个错误,您实际上只想要一次。