首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提取行仅包含特定的字符串

如何提取行仅包含特定的字符串
EN

Stack Overflow用户
提问于 2013-11-22 06:39:10
回答 3查看 118关注 0票数 0

我想要一个命令,它只输出以"COLOUR=“开头的行,然后只输出红色、绿色、黄色、蓝色、品红、青色、白色或黑色。每一种颜色都用“x”分隔,顺序可以洗牌,指定的颜色可以重复,大小写可以忽略)。任何帮助都是非常感谢的!

例如,我有一个包含以下行的文件..。

代码语言:javascript
复制
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

这就是我需要的输出:

代码语言:javascript
复制
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  
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-22 07:16:36

我想您是在COLOUR=之后,后面是(RED|GREEN|YELLOW|BLUE|MAGENTA|CYAN|WHITE|BLACK)的零个或多个序列,后面是一个管道,然后是最后一个颜色,然后是一个管道,所有这些颜色都不区分大小写:

代码语言:javascript
复制
grep -Ei '^COLOUR=((RED|GREEN|YELLOW|BLUE|MAGENTA|CYAN|WHITE|BLACK)\|)*(RED|GREEN|YELLOW|BLUE|MAGENTA|CYAN|WHITE|BLACK)\|?$'

给定输入文件,它将产生所需的输出:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2013-11-22 07:32:09

试着使用下面的perl一行

代码语言:javascript
复制
perl -F'=|\|' -lane 'shift @F eq "COLOUR" and grep {!/RED|GREEN|YELLOW|BLUE|MAGENTA|CYAN|WHITE|BLACK/i} @F or print' file

输出

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2013-11-22 11:17:50

代码语言:javascript
复制
$ 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|black
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20138622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档