使用grep中的regex提取第一个单词



我有一个包含等模式的大型文本文件

*pattern1, 34:38,info=a1,signal=s1
*pattern2, 32:38,info=a1,signal=s1
*pattern2,36:38,info=a1,signal=s1
*pattern_4,38:38,info=a1,signal=s1

我想使用grep提取第一个逗号前唯一的第一个单词。我试着使用grep '^*[A-Za-z]' file.txt | sort --uniqgrep '^*[^,]' file.txt | sort --uniq,但没有只得到第一个单词。有人能评论吗?

如果您知道单词是逗号分隔的,只需从每行的开头搜索逗号以外的任何内容。

使用-o仅打印每行的匹配部分。grep通常用于过滤,而不是提取,但有时也可以使用此选项。

grep -o '^[^,]*' file.txt | sort -u

要获得第一个单词并使其唯一,您可以使用以下awk:

awk -F, '!uniq[$1]++ {print $1}' file
*pattern1
*pattern2
*pattern_4

只有在数组uniq中未找到$1时,条件!uniq[$1]++才会返回true。一旦我们在这个数组中添加了一个元素,我们就会将其值增加到1,从而导致!uniq[$1]++返回false。

{print $1}将仅针对true的情况执行。

使用所示的示例和使用gensub的GNUawk,您可以尝试以下操作。这将在整个Input_file的第一列中提供唯一的值。

awk '!seen[$0=gensub(/,.*/,"\1","1")]++' Input_file

解释:简单的解释是,使用gensub,我们得到第一个逗号之前的所有内容,然后在数组中,我们根据要求否定每行中重复出现的内容。

我尝试使用grep '^*[A-Za-z]' file.txt | sort --uniq

grep默认情况下显示它匹配的整行。如果希望grep只显示匹配的内容,请使用-o选项。

grep '^[^,]*' -o file.txt | sort -u

CCD_ 19表示";任何不是逗号的东西。

相关内容

  • 没有找到相关文章

最新更新