【问题标题】:Remove all punctuation except comma in a regular expression in awk删除 awk 正则表达式中除逗号外的所有标点符号
【发布时间】:2025-12-07 05:40:01
【问题描述】:

我有一个变量

 local= "[ 'service center','New' ]"

我用下面的awk代码去掉了方括号和单引号,

  local=gensub(/[\[\]']+/, "", "g", local);
  local=gensub(/[^,[:punct:][:space:]]/, "", "g", local);

预期的 O/P 是

local = "service center,New"

我写的代码不起作用

【问题讨论】:

  • 你想摆脱空间还是保留空间?
  • 我也想去掉空格,我已经更新了我的问题
  • 空格([:blank:] 表示空格和制表符)或空格字符([:space:] 表示空格、制表符、换页符等)
  • 试试我在下面写的,应该可以解决问题
  • 您的问题现在已经完全改变,不再符合标题的原始陈述。

标签: regex shell awk


【解决方案1】:

原问题: _如何选择所有标点符号,除了带有正则表达式的

[:punct] 组被定义为不是字母、数字、控制字符或空格字符的字符

[:punct] = [^[:alnum:][:cntrl:][:space:]]

所以,你想要的是 不是字母、数字、控制字符、空格字符或 -character 的字符。

[^[:alnum:][:cntrl:][:space:],]

OP 编辑​​后:

以下内容应满足要求:

gsub(/(^[^[:alnum:],]*|[^[:alnum:],[:blank:]]|[^[:alnum:],]*$)/, "", local)

【讨论】:

  • 非常感谢它的工作,我之前做错了,有什么办法我也可以跳过单个空格,请你看看我更新的 O/P
  • @mittu 你应该接受这个答案而不是说谢谢并不断改变你的问题。请阅读someone-answersaccepted
最近更新 更多