regex 将字符串中的所有非字母数字字符替换为下划线

n1bvdmb6  于 2022-11-18  发布在  其他
关注(0)|答案(3)|浏览(170)

我想将特殊字符(regex \W)替换为_(下划线),但不想将空格替换为下划线。还可以将多个连续的特殊字符替换为单个下划线。
示例字符串:The/Sun is red@输出:The_Sun is red_
字符串:.//hack Moon输出:_hack Moon
我试过echo 'string' | sed 's/\W/_/g'但不准确

eyh26e7m

eyh26e7m1#

请使用tr

echo -n "The/Sun is red@" | tr -c -s '[:alnum:][:blank:]' '_'
  • [:alnum:][:blank:]表示字母数字字符和空格
  • -c(或--complement)表示“使用相反的”
  • 使用-s(或--squeeze-repeats)将重复的下划线压缩为一个下划线
bq9c1y66

bq9c1y662#

**sed**进场方式:

s="The/Sun is red@ .//hack Moon"

sed -E 's/[^[:alnum:][:space:]]+/_/g' <<<"$s"
The_Sun is red_ _hack Moon
  • [^[:alnum:][:space:]]+-匹配除字母数字和空格之外的任何字符序列
vwkv1x7d

vwkv1x7d3#

只是用bash参数展开,类似的模式得到其他答案:
第一个

相关问题