使用 sed 修改未定义的字符串

使用 sed 修改未定义的字符串

我需要使用 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 )。BREsed\{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 

相关内容