我有一小段代码
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/