【问题标题】:How should I do if the pattern in awk cmd is a bash variable and contains special character?如果 awk cmd 中的模式是 bash 变量并且包含特殊字符,我该怎么办?
【发布时间】:2012-08-10 11:02:52
【问题描述】:

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

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

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

Q1.如果在awk中使用regex,我应该如何处理这种情况?

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

【问题讨论】:

    标签: linux bash awk


    【解决方案1】:

    关闭。使用-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}"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-13
      • 2021-09-26
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 2022-07-25
      • 2018-09-11
      • 2012-02-21
      相关资源
      最近更新 更多