Grep 使用(和|或)运算符对列进行灰显

Grep 使用(和|或)运算符对列进行灰显,grep,Grep,我有如下数据: bark art|evt|evt|nat barnburner evt|hum bash evt|evt battle act|act|act|evt|evt bay anm|art|art|art|evt|nat|plt beat act|act|atr|com|evt|evt|evt|hum|loc|tme beating act|act|evt|evt bread act|act|evt|evt|hum|nat 我希望能够从中提取第一列中有任何字

我有如下数据:

bark    art|evt|evt|nat
barnburner  evt|hum
bash    evt|evt
battle  act|act|act|evt|evt
bay anm|art|art|art|evt|nat|plt
beat    act|act|atr|com|evt|evt|evt|hum|loc|tme
beating act|act|evt|evt
bread   act|act|evt|evt|hum|nat
我希望能够从中提取第一列中有任何字符串的所有行,但第二列中有特定的信息模式。 更具体地说,我想提取那些在第二列中具有evt的行,以及至少我指定的另一个值

例如,我想提取所有具有evt和至少humnat的行(或者同时具有humnatevt)。 因此,我期望的结果是:

bark    art|**evt**|**evt**|**nat**    
barnburner  **evt**|**hum**
bay anm|art|art|art|**evt**|**nat**|plt
beat    act|act|atr|com|**evt**|**evt**|**evt**|**hum**|loc|tme
bread   act|act|**evt**|**evt**|**hum**|**na**t
我一直试图用
grep
来实现这一点,但没有成功

我一直在尝试的grep是:

$ grep 'evt\|(hum|nat)' file
有人能告诉我我做错了什么吗?
谢谢

您已经非常接近了,只需使用扩展正则表达式参数
E

$ grep -E 'evt\|(hum|nat)' file
bark    art|evt|evt|nat
barnburner  evt|hum
bay anm|art|art|art|evt|nat|plt
beat    act|act|atr|com|evt|evt|evt|hum|loc|tme
bread   act|act|evt|evt|hum|nat

很接近,只需使用扩展正则表达式参数
E

$ grep -E 'evt\|(hum|nat)' file
bark    art|evt|evt|nat
barnburner  evt|hum
bay anm|art|art|art|evt|nat|plt
beat    act|act|atr|com|evt|evt|evt|hum|loc|tme
bread   act|act|evt|evt|hum|nat

很接近,只需使用扩展正则表达式参数
E

$ grep -E 'evt\|(hum|nat)' file
bark    art|evt|evt|nat
barnburner  evt|hum
bay anm|art|art|art|evt|nat|plt
beat    act|act|atr|com|evt|evt|evt|hum|loc|tme
bread   act|act|evt|evt|hum|nat

很接近,只需使用扩展正则表达式参数
E

$ grep -E 'evt\|(hum|nat)' file
bark    art|evt|evt|nat
barnburner  evt|hum
bay anm|art|art|art|evt|nat|plt
beat    act|act|atr|com|evt|evt|evt|hum|loc|tme
bread   act|act|evt|evt|hum|nat
格雷普:

  • 默认值:BRE(基本正则表达式),必须转义一些特殊字符才能赋予它们特殊的含义。例如,(…

  • -E选项:(扩展正则表达式)中,您可以跳过一些特殊字符,将特殊含义带走。
    |,(,{…

因此,您使用了grep的默认选项,即BRE
evt\|(hum | nat)
匹配
“evt”或literal”(hum | hat)
带有BRE,您要寻找的可能是:
evt | \(hum \| nat\)
这里的
\(和\
具有特殊意义

或者使用
-E
BRE,然后你就可以
grep'evt\|(哼哼| hat)
\|
去掉了特殊的含义,使其与文字
“|”
grep:

  • 默认值:BRE(基本正则表达式),您必须转义一些特殊字符才能赋予它们特殊的含义。例如
    |,(…

  • -E选项:(扩展正则表达式)中,您可以跳过一些特殊字符,将特殊含义带走。
    |,(,{…

因此,您使用了grep的默认选项,即BRE
evt\|(hum | nat)
匹配
“evt”或literal”(hum | hat)
带有BRE,您要寻找的可能是:
evt | \(hum \| nat\)
这里的
\(和\
具有特殊意义

或者使用
-E
BRE,然后你就可以
grep'evt\|(哼哼| hat)
\|
去掉了特殊的含义,使其与文字
“|”
grep:

  • 默认值:BRE(基本正则表达式),您必须转义一些特殊字符才能赋予它们特殊的含义。例如
    |,(…

  • -E选项:(扩展正则表达式)中,您可以跳过一些特殊字符,将特殊含义带走。
    |,(,{…

因此,您使用了grep的默认选项,即BRE
evt\|(hum | nat)
匹配
“evt”或literal”(hum | hat)
带有BRE,您要寻找的可能是:
evt | \(hum \| nat\)
这里的
\(和\
具有特殊意义

或者使用
-E
BRE,然后你就可以
grep'evt\|(哼哼| hat)
\|
去掉了特殊的含义,使其与文字
“|”
grep:

  • 默认值:BRE(基本正则表达式),您必须转义一些特殊字符才能赋予它们特殊的含义。例如
    |,(…

  • -E选项:(扩展正则表达式)中,您可以跳过一些特殊字符,将特殊含义带走。
    |,(,{…

因此,您使用了grep的默认选项,即BRE
evt\|(hum | nat)
匹配
“evt”或literal”(hum | hat)
带有BRE,您要寻找的可能是:
evt | \(hum \| nat\)
这里的
\(和\
具有特殊意义


<>或使用<代码> -e >代码> BRE,然后可以<代码> GRP'EVT\[(HUM.HAT)< /代码>,<代码> >代码>使其与文字<代码> > /代码> /P>匹配,而不使用复数<代码> GRP命令,您可以考虑使用<代码> AWK < /代码>,它非常容易处理列和条件。<代码> AWK-V FS=“1”=“EVT”。和($ 2==“EVT”=2美元=“ACT”)“文件< /代码>”,而不是使用复数<代码> GRP命令,您可以考虑使用“代码> AWK < /代码>,它非常容易处理列和条件。<代码> AWK-V FS=“1”=“EVT”& &($==“EVT”=$2==“ACT”)。而不是使用复数<代码> GRP<代码>命令,您可以考虑使用<代码> AWK < /代码>,它很容易处理列和条件。<代码> AWK-V FS=“1”=“EVT”&(2美元=“EVT”=2美元=“ACT”)。而不是使用复数<代码> GRP命令,您可以考虑使用<代码> AWK < /代码>,它非常容易处理列和条件。<代码> AWK-V FS=“1”=“EVT”& &($ 2=“EVT”=2美元=“ACT”)“文件< /代码>等”。