首页 > 解决方案 > 使用 sed 以编程方式创建正则表达式以在 gawk 中使用

问题描述

我正在尝试从文件中的许多选项创建一个大的正则表达式,以用于gawk. 目标是在lines.txt 中找到匹配regex.txt 中任何选项的匹配项

要搜索的行文件

echo -n "dog
cat
bobcat" > lines.txt

将组合成一个大的正则表达式的正则表达式文件

echo -n "dog
cat" > regex.txt

我知道我正在尝试做的事情的结构,但是当我使用sed将位置匹配字符插入到正则表达式中时,我得到一个尾随|.

这是我目前拥有的

rgx=$(cat "regex.txt" | sed 's#^#\\\\<#' | tr '\n' '|')


gawk -v regex=$rgx 'BEGIN {IGNORECASE = 1} {print gsub(regex,"")}' lines.txt

电流输出gawk

1
1
7

所需的输出gawk

1
1
0

请帮忙

标签: bashawksed

解决方案


在使用 awk 时也使用 sed 是没有意义的。听起来你想要这样的东西:

gawk '
    BEGIN { IGNORECASE = 1 } 
    NR == FNR {
        regex = (NR>1 ? regex "|" : "") "\\<" $0 "\\>"
        next
    }
    { print gsub(regex,"") }
' regex.txt lines.txt
1
1
0

推荐阅读