Sed - 用单个字符替换图案

时间:2015-12-19 13:14:30

标签: regex sed pattern-matching

我有以下文字

  

我真的很酷。我给自己评分10分。

使用 sed 我想将文字更改为

  

我* * *。我* * 10 * * 10。

即(将[a-z]替换为*) 我尝试使用模式s/[a-z]/*/g

但它将文本替换为

  

我** ****** ****。我**** ****** 10 *** ** 10。

2 个答案:

答案 0 :(得分:1)

您的模式用星号替换每个小写字母。您想要用星号替换多个连续的小写字母。使用+ for repetition

s/[a-z]\+/*/g

答案 1 :(得分:0)

@ndn给出的答案是正确的想法,但SED默认使用Posix 2 Basic Regular Expressions,因此你没有完整的正则表达式的所有选项。特别是+运算符(重复一次或多次)在SED中无效。幸运的是*(重复零或更多)是。因此我们可以这样做:

sed s/[a-z][a-z]*/*/g

哪个应该做你想要的。您还可以使用sed命令行选项启用完整正则表达式(-r对我来说)

sed -r s/[a-z]+/*/g