【问题标题】:Search pattern containing forward slash using AWK使用 AWK 搜索包含正斜杠的模式
【发布时间】:2021-03-30 23:16:14
【问题描述】:

在 AWK 中,有没有办法匹配包含正斜杠 / 的模式而不实际转义它?

awk '$1~/pattern/' file

只要模式中没有/,上述命令就可以正常工作。

我正在寻找类似于 sed 中可用的内容,以便在搜索和替换语法中使用不同的分隔符。

【问题讨论】:

    标签: awk


    【解决方案1】:

    是的,你可以这样做

    awk '$0~v' v="patt/ern"
    

    说明

    注:从 cmets 中提取,所以也给他们点赞吧!

    awk动态正则表达式正则表达式常量并不完全相同。 OP 问题中的示例是 regex constant,您将其转换为 dynamic regex(请参阅。Using Dynamic Regexps)。

    【讨论】:

    • 最好添加一些在 awk 中 dynamic regexregex constant 不完全相同的描述。 OP 问题中的示例是regex constant 你把它变成了dynamic regex
    • @Kent 我不是 regex constantregex constant 之间的区别,但不知何故这符合我的要求。
    • @jkshah 简单地说,$0~/pattern/$0~"pattern" 不完全相同,这取决于模式。您当前的模式可能有效。但你应该谨慎使用它。看这里:math.utah.edu/docs/info/gawk_5.html#SEC32
    • @Kent 感谢您的参考。现在我懂了。由于我的模式几乎是来自某个地图文件的常量字符串,因此应该可以正常工作。我的印象是只有// 有效。感谢您的帮助。
    【解决方案2】:

    这对你来说可能没问题:

    kent$ echo "///aaa"|awk '/[/]/'
    ///aaa
    

    【讨论】:

    • 感谢您的回复,但模式可能不像/ 那样简单。它可能是a/b,因为它可能来自另一个文件,所以我不喜欢任何修改并希望按原样放置模式。我希望它很清楚。
    • @jkshah 我的意思是,你不必逃避/,你可以使用char-class。如果您的模式需要foo/bar/blah,您只需foo[/]bar[/]blah
    • 我知道了。你建议用[/] 代替\/,但我想要的不是改变正则表达式模式。它来自一些地图文件,我打算将它存储在数组中并将其用作匹配模式
    • +1 用于转义的备用选项。但我会接受其他答案。
    • @jkshah 谢谢,没关系。关键是你的问题得到了解决。 :)
    猜你喜欢
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-01
    • 2018-09-21
    相关资源
    最近更新 更多