我想将特殊字符(regex \W)替换为_(下划线),但不想将空格替换为下划线。还可以将多个连续的特殊字符替换为单个下划线。示例字符串:The/Sun is red@输出:The_Sun is red_字符串:.//hack Moon输出:_hack Moon我试过echo 'string' | sed 's/\W/_/g'但不准确
The/Sun is red@
The_Sun is red_
.//hack Moon
_hack Moon
echo 'string' | sed 's/\W/_/g'
eyh26e7m1#
请使用tr:
tr
echo -n "The/Sun is red@" | tr -c -s '[:alnum:][:blank:]' '_'
[:alnum:][:blank:]
-c
--complement
-s
--squeeze-repeats
bq9c1y662#
**sed**进场方式:
sed
s="The/Sun is red@ .//hack Moon" sed -E 's/[^[:alnum:][:space:]]+/_/g' <<<"$s" The_Sun is red_ _hack Moon
[^[:alnum:][:space:]]+
vwkv1x7d3#
只是用bash参数展开,类似的模式得到其他答案:第一个
3条答案
按热度按时间eyh26e7m1#
请使用
tr
:[:alnum:][:blank:]
表示字母数字字符和空格-c
(或--complement
)表示“使用相反的”-s
(或--squeeze-repeats
)将重复的下划线压缩为一个下划线bq9c1y662#
**
sed
**进场方式:[^[:alnum:][:space:]]+
-匹配除字母数字和空格之外的任何字符序列vwkv1x7d3#
只是用bash参数展开,类似的模式得到其他答案:
第一个