2012-02-08 86 views
14

我想用通配符替换字符串,但不起作用。使用带通配符的SED

字符串看起来像 “一些字符串-8”

我写

sed -i 's/string-*/string-0/g' file.txt 

但输出

some-string-08 

回答

25

星号(*)的意思是“零个或更多的前一项“。

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

sed -i 's/string-./string-0/g' file.txt 

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

sed -i 's/string-.*/string-0/g' file.txt 
+0

好吧,也许我的问题是不完整的....你的命令适用于这个fien。但是,如果我有'some-string-8 -x --command acommand',执行该命令的输出是'some-string-0'。它会删除之后的所有字符。我想'some-string-0 -x --command acommand' – mahmood 2012-02-08 07:21:06

+0

确定第一个命令是我想要的 – mahmood 2012-02-08 07:23:10

+0

如果您希望在替换字符串中使用通配符,该怎么办? 例如:将'AAA。* BBB'替换为'CCC。* DDD' – user2561747 2015-12-01 23:44:02

5

所以,概念正则表达式中的“通配符”有点不同。为了匹配“任何字符”,你可以使用“。”。 “*”修饰符表示可以匹配任意次数。