【发布时间】:2015-12-19 13:14:30
【问题描述】:
我有以下文字
我真的很酷。我给自己打了 10 分(满分 10 分)。
使用sed我想把文字改成
我 * * *。我 * * 10 * * 10。
即(将 [a-z] 替换为 * )
我尝试使用模式s/[a-z]/*/g
但它把文本替换为
我 ** ****** ****。我 **** ****** 10 *** ** 10.
【问题讨论】:
标签: regex sed pattern-matching
我有以下文字
我真的很酷。我给自己打了 10 分(满分 10 分)。
使用sed我想把文字改成
我 * * *。我 * * 10 * * 10。
即(将 [a-z] 替换为 * )
我尝试使用模式s/[a-z]/*/g
但它把文本替换为
我 ** ****** ****。我 **** ****** 10 *** ** 10.
【问题讨论】:
标签: regex sed pattern-matching
您的模式用星号替换每个小写字母。您想用星号替换尽可能多的连续小写字母。使用+ for repetition:
s/[a-z]\+/*/g
【讨论】:
[a-z] 的区别在于您不会替换单个字符,而是替换所有与[a-z] 匹配的连续字符。
+ 将匹配字符 +。 \+ 会有重复的意思。对此感到抱歉。
@ndn 给出的答案是正确的想法,但 SED 默认使用 Posix 2 基本正则表达式,因此您没有完整正则表达式的所有选项。特别是 + 运算符(重复一次或多次)在 SED 中无效。幸运的是*(重复零个或多个)是。因此我们可以这样做:
sed s/[a-z][a-z]*/*/g
应该做你想做的事。您还可以使用 sed 命令行选项启用完整的正则表达式(对我来说是-r)
sed -r s/[a-z]+/*/g
【讨论】: