首页 > 解决方案 > Grep 部分搜索但打印整个匹配的单词

问题描述

我有这种制表符分隔格式的数据-

Sample1_iu Sample2_id Sample3_ab 233_Sample4_ss .... PART_Sample1442_22

现在,我只有样本 ID,即只有部分匹配的信息。当我用 grep 搜索时,我想查看整个单词。

前任。当我用 grep 搜索“Sample2”时,我希望输出为“Sample2_id”

grep -w 和 grep -o 打印匹配的单词。由于数据是制表符分隔的,因此我无法定义正则表达式来正确隔离信息。我什至应该使用 grep 还是尝试其他方法?

标签: searchgrep

解决方案


$ s='Sample1_iu Sample2_id Sample3_ab 233_Sample4_ss .... PART_Sample1442_22'

# with GNU grep
$ echo "$s" | grep -wo '\w*Sample2\w*'
Sample2_id

# if \w isn't supported
$ echo "$s" | grep -wo '[[:alnum:]_]*Sample2[[:alnum:]_]*'
Sample2_id

如果要匹配制表符以外的任何字符,可以使用这些:

# GNU grep with PCRE available
grep -woP '[^\t]*Sample2[^\t]*'

# with a shell that supports $'..' quoting
grep -wo $'[^\t]''*Sample2'$'[^\t]*'

推荐阅读