我有一个与 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/