【问题标题】:Replace all non-alphanumeric characters with AWK用 AWK 替换所有非字母数字字符
【发布时间】:2021-05-24 23:35:50
【问题描述】:

我知道使用sed -E 's/[^[:alnum:][:space:]]+/?/g $input' 会将我输入文件的所有非字母数字字符替换为问号。

我应该如何使用 AWK 做同样的事情?

【问题讨论】:

  • 检查gsub的语法。相同的正则表达式将起作用
  • 喜欢:awk '{gsub(/[^[:alnum:][:space:]]+/,"?")} 1' Input_file 其中gsub 表示awk 中的全局替换。
  • @RavinderSingh13 嘿。我已经在我的代码中尝试了该行,它用一个问号替换了所有没有空格的非字母数字字符。像这样:Hello!@#$ as Hello?。无法打印为“Hello????”
  • awksed -E 都使用 ERE。除了捕获组之外,在 POSIX sed 中执行某些操作的正则表达式在 POSIX awk 中执行相同操作。您原来的sed 正则表达式用单个? 替换多个字符,因此在awk 中使用相同的正则表达式也是如此。相反,如果您希望将每个单独的字符替换为 ?,则在两个命令中从正则表达式中删除 +

标签: awk


【解决方案1】:

您需要修复您的正则表达式以及您需要使用awkgsub 函数来满足您的要求。因为我们提到了gsub(全局替换),所以我们不需要在这里使用+,因为它会立即捕获所有内容并用单个? 替换所有内容。

awk '{gsub(/[^[:alnum:][:space:]]/,"?")} 1' Input_file

输入Hello!@#$ 将变为Hello????

【讨论】:

    【解决方案2】:

    为什么不tr

      ... | tr -c '[:alnum:][:space:]' '?'
    

    【讨论】:

    • 看来 OP 实际上并不想要 -c
    猜你喜欢
    • 2010-12-20
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 2019-09-15
    • 2013-06-11
    • 2015-06-06
    相关资源
    最近更新 更多