【问题标题】:Using an ERE Pattern File for a grep Inversion Search使用 ERE 模式文件进行 grep 反转搜索
【发布时间】:2023-02-21 19:06:42
【问题描述】:

我需要在 grep 模式文件 (ERE) 中使用正则表达式模式,因为 BRE 不够用。 如果数据文件包含:

alpha 1
bravo 1
gamma 1
delta 1
omicron 1
sigma 1
alpha 2
bravo 2
gamma 2
delta 2

并且 grep 反转模式文件包含:

alpha
bravo
gamma
delta

然后是以下 grep 反转: $ grep -v -f pattern_file main_file 产生

omicron 1
sigma 1

这是所需的 BRE 输出。但是我需要调整模式文件 ERE 以便关键字规定行首+关键字+空格模式文件条目定义为:

"^alpha "
"^bravo "
"^gamma "
"^delta "

产生相同的两条记录输出的正确 grep 反转是什么? 以下不起作用: $ grep -E -v -f pattern_file main_file

【问题讨论】:

    标签: bash grep


    【解决方案1】:

    您可以使用 bash 进程替换:

    #!/bin/bash
    
    grep -E -v -f <(sed 's/.*/^& /' pattern_file) main_file
    

    awk

    awk 'FNR == NR {arr[$0]; next} !($1 in arr)' pattern_file main_file
    

    笔记:这里的行为有点不同;例如 gamma 1 gamma 1 都将被 awk 排除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-21
      • 2011-07-29
      • 1970-01-01
      • 2020-12-08
      • 2014-09-10
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      相关资源
      最近更新 更多