bash - 使用 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
请帮忙
解决方案
在使用 awk 时也使用 sed 是没有意义的。听起来你想要这样的东西:
gawk '
BEGIN { IGNORECASE = 1 }
NR == FNR {
regex = (NR>1 ? regex "|" : "") "\\<" $0 "\\>"
next
}
{ print gsub(regex,"") }
' regex.txt lines.txt
1
1
0
推荐阅读
- javascript - Javascript是否有一种“切片”地图的好方法
- r - 如何使用 RVEST 从课程中刮取标题?
- google-api - 使用 HttpRequest 作为 payload_type 时,Google Cloud Tasks 始终将 HttpMethod 设置为 GET
- laravel - Laravel - 从表中获取数据 where 其他表中的子句
- dart - 调整 Flutter FloatingActionButton 的大小
- reactjs - react-bootstrap popover 没有显示(虽然工具提示没问题)
- python - 从另一个数据框列创建新数据框时出错
- java - HashMap vs 数组搜索时间复杂度
- python - 如何在 Instagram 上刮点赞
- java - 如何在 spark submit 命令中将多个 -D 参数传递给 driver-java-options