找到文件中正则表达式的第一个匹配项,并打印出来

时间:2013-11-29 23:26:22

标签: regex linux bash sed

我一边有一个单词集,另一边有一个文件。我需要他们的交集。即在文件中至少出现一次的单词。

我可以用

提取匹配的行
sed -rn 's/(word1|word2|blablabla|wordn)/\1/p' myfile.txt

但我不能前进。

感谢您的帮助,Olivier

3 个答案:

答案 0 :(得分:1)

如果我找到你,你只需要将sed结果传递给uniq

sed -rn 's/.*(word1|word2|blablabla|wordn).*/\1/p' myfile.txt | uniq

此外,您需要匹配sed中的整行,以便只获得所需的单词作为输出。这就是为什么我将.*放在模式的前面和末尾。

答案 1 :(得分:1)

也许' 可以在这里工作吗?

grep -o -E 'word1|word2|word3' file.txt | sort -u

答案 2 :(得分:1)

你可以使用grep和sort来实现:

grep -o 'word1\|word2\|word3' myfile.txt | sort -u

-o开关使grep只输出匹配的字符串而不是整行。 sort -u对匹配的单词进行排序并删除重复项。