gpt4 book ai didi

linux - awk cmd中的pattern是bash变量,包含特殊字符怎么办?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:18:35 27 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

关于linux - awk cmd中的pattern是bash变量,包含特殊字符怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11900333/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com