egrep的linux管道没有按预期工作

时间:2014-03-27 18:01:52

标签: regex linux bash pipe sh

我有一小段代码

 egrep -oh '([A-Z]+)_([A-Z]+)_([A-Z]+)' -R /path | uniq | sort

当我不想显示任何副本时,我使用此脚本来搜索存储在公共目录中的文件中的环境变量,但我只想要任何变量的名称(如果有的话)。

不用说正则表达式有效,匹配的单词是由大写*_*_*的3个字母子集组成的单词,问题是uniq看起来不像它的工作和做任何事情,变量只是在egrep找到它们时打印出来。

甚至uniq -u都不行。

管道本身就是问题吗?

1 个答案:

答案 0 :(得分:3)

如果你希望它以这种方式工作,那么

uniq要求对其输入进行排序。来自man page(强调我的)

  

说明:过滤相邻匹配行

所以你可以在sort之前在管道中添加uniq,但这不是必需的,你只需使用-u标志sort来输出排序输出中的唯一行:

egrep -oh '([A-Z]+)_([A-Z]+)_([A-Z]+)' -R /path | sort -u