我需要使用 sed 修改名为“case”的文档,其中包含行 example="value",其中 value 可以采用任何 2 o 3 个字符的整数,例如:
example=55
example=777
otherthing=anothervalue
我想使用 sed 将两个示例行修改为两行,称为 example=000
我尝试过使用
sed -i -e "s/example=*/example=000/g" case
同时修改它们,但显然它不起作用。我需要知道的是如何让 sed 在 后面取任意 2 或 3 个字符=
答案1
*
您混淆了for的不同含义Shell 文件名扩展和Posix 基本正则表达式( BRE
)。
在正则表达式中,*
是其前面的字符的量词,因此=*
表示 0 次或多次出现=
。如果您想要“任意数量的任意字符”,请使用.*
。
sed -i -e 's/example=.*/example=000/' case
更多提示:
- 您可以省略
g
修饰符,因为您的字符串可能每行只出现一次。 - 如果你不还想匹配
another_example=value
,请使用它^example=.*
来确保它example
位于行的开头。 .
您可以使用[0-9]
or[[:digit:]]]
来仅匹配数字,而不是任何字符。*
您可以使用量词代替+
,这意味着1 个或多个字符(在 GNU 中必须转义为\+
for或写为for generic )。BRE
sed
\{1,\}
sed
要仅匹配 2 或 3 个字符,您可以这样做
sed -i -e 's/example=.\{2,3\}/example=000/' case
或使用扩展正则表达式 ( ERE
) ( sed -E
):
sed -i -E -e 's/example=.{2,3}/example=000/' case