使用带通配符的SED

mah*_*ood 26 bash sed wildcard

我想用通配符替换字符串,但它不起作用.

字符串看起来像"some-string-8"

我写

sed -i 's/string-*/string-0/g' file.txt
Run Code Online (Sandbox Code Playgroud)

但输出是

some-string-08
Run Code Online (Sandbox Code Playgroud)

tom*_*tom 38

星号(*)表示"前一项的零或更多".

如果要匹配任何单个字符使用

sed -i 's/string-./string-0/g' file.txt
Run Code Online (Sandbox Code Playgroud)

如果要匹配任何字符串(即任何单个字符零次或多次)使用

sed -i 's/string-.*/string-0/g' file.txt
Run Code Online (Sandbox Code Playgroud)

  • 原来它被称为回引用,形式 (.*) 的通配符将被 \1, \2, ... 等替换。例如 `sed -r 's/a (.*)cat/the \1bat/g ' <<< "a womancat"` 产生 `thewomanbat`。从 [here](http://stackoverflow.com/questions/15188495/backreferences-in-sed-returning-wrong-value) 弄清楚这一点 (4认同)

Mic*_*hri 6

因此,正则表达式中"通配符"的概念有点不同.为了匹配"任何角色",你会使用"." "*"修饰符表示匹配任意次数.