我有一小段代码

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

当我不想显示任何重复项时,我使用这个脚本来挖掘存储在公共目录中的文件中的环境变量,但我只想知道任何变量的名称(如果正在使用的话)。
不用说regex是有效的,匹配的单词是由3个子集大写字母组成的,问题是*_*_*看起来不像是有效的,做任何事情,变量只是在uniq找到它们时打印出来。
egrep都做不到。
管道本身就是问题吗?

最佳答案

如果您希望uniq以这种方式工作,它需要对其输入进行排序。来自man page:(强调我的)
描述:过滤相邻匹配行
因此,您可以将sort放在管道中的uniq之前,但这不是必需的,您只需使用-u标志sort即可从已排序的输出中输出唯一的行:

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

关于regex - 带有egrep的linux管道无法按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22695667/

10-12 05:17