regex - 为什么使用字符串替换来形成正则表达式不起作用?

标签 regex bash awk substitution

我有一个与 awk 一起使用的正则表达式,用于在文件的一行中查找任何指定的单词。它看起来像这样 awk "/word1/||/word2/||/word3/"filename。作为替代方案,我一直在尝试指定这样的词 WORDS="word1 word2 word3",然后使用 bash 字符串替换来形成传递给 awk 的正则表达式。

我试过很多方法都无济于事。 awk 只是转储整个文件的内容或吐出一些关于正则表达式形式的提示。

这是我所拥有的:

#!/bin/bash

FILE="myfile"
WORDS="word1 word2 word3"

# use BASH string substitution to obtain the regex which should look like this:
# "/word1/||/word2/||/word3/"

REGEX=\"/${WORDS// //||/}/\"

awk ${REGEX} $FILE

我相当确定它与引用有关,我已经尝试了各种使用回显和反引号的方法并且可以使它看起来正确(当回显时)但是当实际尝试使用它时, 它失败了。

最佳答案

尝试替换:

REGEX=\"/${WORDS// //||/}/\"

与:

REGEX="/${WORDS// //||/}/"

请注意,无需转义双引号,因为它们实际上并不是正则表达式的一部分。

关于regex - 为什么使用字符串替换来形成正则表达式不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9479522/

相关文章:

javascript - 让 Node.js 支持 JavaScript 文件的 shebang (#!)

python - 限制 python 文件只能由 bash 脚本运行

linux - 如何使用awk将增量字符串添加到文件开头

linux - 如何使用 AWK 或 Sed 在 x 个单词后插入换行符\n

django - 语法正则表达式无效

regex - 使用正则表达式在字符串周围添加引号

jquery - 如何在 jquery 中对 *@ 进行转义序列

javascript - 正则表达式保护(绕过 XSS 或开放重定向)- Javascript

linux - 如何创建动态变量并为其赋值?

shell - 比较文本文件中的日期| shell