1

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

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

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

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

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

4

1 回答 1

8

关闭。最好将 shell 变量传递给 awk with,而-v不是直接将它们放在 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}"
于 2012-08-10T11:22:30.707 回答