在 grep 中使用正则表达式提取第一个单词
Extract first word using regex in grep
我有一个大文本文件,其中包含
等模式
*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 --uniq
和 grep '^*[^,]' file.txt | sort --uniq
但没有得到第一个词。有人可以评论吗?
如果您知道单词是逗号分隔的,只需从每行的开头搜索逗号以外的任何内容。
使用-o
只打印每行匹配的部分。 grep
通常用于过滤,不用于提取,但有时可以使用此选项。
grep -o '^[^,]*' file.txt | sort -u
要获取第一个单词并使其独一无二,您可以使用此 awk
:
awk -F, '!uniq[]++ {print }' file
*pattern1
*pattern2
*pattern_4
仅当在数组 uniq
中找不到 </code> 时,条件 <code>!uniq[]++
才会 return 为真。一旦我们在这个数组中添加一个元素,我们就会将它的值增加到 1
从而导致 !uniq[]++
到 return false.
{print }
只会在 true
情况下执行。
使用您展示的示例和 GNU awk
使用 gensub
您可以尝试以下操作。这将在整个 Input_file.
的第一列中提供唯一值
awk '!seen[[=10=]=gensub(/,.*/,"\1","1")]++' Input_file
解释: 简单的解释是,使用 gensub
我们得到第一个逗号之前的所有内容,然后在数组中我们正在根据要求否定每行中的重复项。
I tried using grep '^*[A-Za-z]' file.txt | sort --uniq
grep 默认显示它匹配的整行。如果您希望 grep 仅显示匹配的内容,请使用 -o
选项。
grep '^[^,]*' -o file.txt | sort -u
[^,]
表示“任何不是逗号的东西。
我有一个大文本文件,其中包含
等模式*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 --uniq
和 grep '^*[^,]' file.txt | sort --uniq
但没有得到第一个词。有人可以评论吗?
如果您知道单词是逗号分隔的,只需从每行的开头搜索逗号以外的任何内容。
使用-o
只打印每行匹配的部分。 grep
通常用于过滤,不用于提取,但有时可以使用此选项。
grep -o '^[^,]*' file.txt | sort -u
要获取第一个单词并使其独一无二,您可以使用此 awk
:
awk -F, '!uniq[]++ {print }' file
*pattern1
*pattern2
*pattern_4
仅当在数组 uniq
中找不到 </code> 时,条件 <code>!uniq[]++
才会 return 为真。一旦我们在这个数组中添加一个元素,我们就会将它的值增加到 1
从而导致 !uniq[]++
到 return false.
{print }
只会在 true
情况下执行。
使用您展示的示例和 GNU awk
使用 gensub
您可以尝试以下操作。这将在整个 Input_file.
awk '!seen[[=10=]=gensub(/,.*/,"\1","1")]++' Input_file
解释: 简单的解释是,使用 gensub
我们得到第一个逗号之前的所有内容,然后在数组中我们正在根据要求否定每行中的重复项。
I tried using
grep '^*[A-Za-z]' file.txt | sort --uniq
grep 默认显示它匹配的整行。如果您希望 grep 仅显示匹配的内容,请使用 -o
选项。
grep '^[^,]*' -o file.txt | sort -u
[^,]
表示“任何不是逗号的东西。