我想要一个命令,它只输出以"COLOUR=“开头的行,然后只输出红色、绿色、黄色、蓝色、品红、青色、白色或黑色。每一种颜色都用“x”分隔,顺序可以洗牌,指定的颜色可以重复,大小写可以忽略)。任何帮助都是非常感谢的!
例如,我有一个包含以下行的文件..。
COLOUR=ACK|RED|GREEN|YELLOW|BLUE|MAGENTA|CYAN|WHITE|
COLOUR=ACK|RED|GREEN|YELLOW|BLUE|MAGENTA|CYAN |WHITE| TOMORROW
COLOUR=RED|GREEN|yellow|BLUE|MAGENTA|CYAN|white
COLOUR=*BL*ACK|RE D|GREEN|YELLOWabc|
COLOUR=BLACK|green|YELLOW|RED|WHiTE|BLUE|MAGENTA|CYAN
COLOUR=BLACK|GR
COLOUR=BLACK
COLOUR=BLACK|
COLOUR=BLACK|BLACK|BLACK
COLOUR=RED|RED|RED|BluE|YELLOW|yellow|CYAN|black
COLOUR=COLOUR = COLOUR
COLOUR=RED|HELLO|THANKS这就是我需要的输出:
COLOUR=RED|GREEN|yellow|BLUE|MAGENTA|white
COLOUR=BLACK|green|YELLOW|RED|WHiTE|BLUE|MAGENTA|CYAN
COLOUR=BLACK
COLOUR=BLACK|BLACK|BLACK
COLOUR=RED|RED|RED|BluE|YELLOW|yellow|CYAN|black 发布于 2013-11-22 07:16:36
我想您是在COLOUR=之后,后面是(RED|GREEN|YELLOW|BLUE|MAGENTA|CYAN|WHITE|BLACK)的零个或多个序列,后面是一个管道,然后是最后一个颜色,然后是一个管道,所有这些颜色都不区分大小写:
grep -Ei '^COLOUR=((RED|GREEN|YELLOW|BLUE|MAGENTA|CYAN|WHITE|BLACK)\|)*(RED|GREEN|YELLOW|BLUE|MAGENTA|CYAN|WHITE|BLACK)\|?$'给定输入文件,它将产生所需的输出:
COLOUR=RED|GREEN|yellow|BLUE|MAGENTA|CYAN|white
COLOUR=BLACK|green|YELLOW|RED|WHiTE|BLUE|MAGENTA|CYAN
COLOUR=BLACK
COLOUR=BLACK|BLACK|BLACK
COLOUR=RED|RED|RED|BluE|YELLOW|yellow|CYAN|black发布于 2013-11-22 07:32:09
试着使用下面的perl一行
perl -F'=|\|' -lane 'shift @F eq "COLOUR" and grep {!/RED|GREEN|YELLOW|BLUE|MAGENTA|CYAN|WHITE|BLACK/i} @F or print' file输出
COLOUR=RED|GREEN|yellow|BLUE|MAGENTA|CYAN|white
COLOUR=BLACK|green|YELLOW|RED|WHiTE|BLUE|MAGENTA|CYAN
COLOUR=BLACK
COLOUR=BLACK|BLACK|BLACK
COLOUR=RED|RED|RED|BluE|YELLOW|yellow|CYAN|black发布于 2013-11-22 11:17:50
$ awk '
BEGIN{ c="RED|GREEN|YELLOW|BLUE|MAGENTA|CYAN|WHITE|BLACK" }
toupper($0) ~ "^COLOUR=(" c ")([|](" c "))*$"
' file
COLOUR=RED|GREEN|yellow|BLUE|MAGENTA|CYAN|white
COLOUR=BLACK|green|YELLOW|RED|WHiTE|BLUE|MAGENTA|CYAN
COLOUR=BLACK
COLOUR=BLACK|BLACK|BLACK
COLOUR=RED|RED|RED|BluE|YELLOW|yellow|CYAN|blackhttps://stackoverflow.com/questions/20138622
复制相似问题