如果awk cmd中的模式是bash变量并包含特殊字符,我该怎么办?

时间:2012-08-10 11:02:53

标签: linux bash awk

说明:1行awk cmd用于打印我的shell脚本中匹配行之后的所有行,如下所示。

#!/bin/bash
...
awk "f;/${PATTERN}/{f=1}" ${FILE}

由于$ {PATTERN}可能包含特殊字符,因此在这种情况下cmd将失败。

Q1。如果在awk中使用正则表达式,我应该如何处理这种情况?

Q2。是否可以在此cmd中使用原始字符串而不是正则表达式,例如 / $ PATTERN / 以避免特殊字符问题?

1 个答案:

答案 0 :(得分:8)

关闭。使用-v将shell变量传递给awk比将它们直接放入awk脚本更好。

awk -v pat="${PATTERN}" 'f; $0 ~ pat {f=1}' "${FILE}"

如果${PATTERN}不是正则表达式,则可以使用其他运算符:

awk -v pat="${PATTERN}" 'f; $0 == pat {f=1}' "${FILE}"

或者您甚至可以处理非正则表达式子串:

awk -v pat="${PATTERN}" 'f; index($0, pat) {f=1}' "${FILE}"