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

0 sed text-processing

我需要使用 sed 修改名为“case”的文档,其中的行 example="value" 其中 value 可以采用任何 2 o 3 个字符的整数,例如:

example=55
example=777
otherthing=anothervalue
Run Code Online (Sandbox Code Playgroud)

我想使用 sed 将两个示例行修改为两行,称为 example=000

我试过用

sed -i -e "s/example=*/example=000/g" case 
Run Code Online (Sandbox Code Playgroud)

同时修改它们,但显然它不起作用。我需要知道的是如何让 sed 在=

pLu*_*umo 7

您混淆了*for Shell Filename ExpansionPosix Basic Regex ( BRE)的不同含义。

在正则表达式中,*是它前面字符的量词,因此=*表示 0 次或多次出现=。如果您想要“任意数量的任意字符”,请使用.*.

sed -i -e 's/example=.*/example=000/' case 
Run Code Online (Sandbox Code Playgroud)

还有一些提示:

  • 您可以省略g修饰符,因为您的字符串可能每行只出现一次。
  • 如果你希望也匹配another_example=value,使用^example=.*,以确保example在该行的开始。
  • .您可以使用[0-9][[:digit:]]]仅匹配数字,而不是任何字符。
  • 代替*,您可以使用+量词,这意味着1 个或多个字符(在 GNU 中必须转义为\+for或编写为 general )。BREsed\{1,\}sed

要仅匹配 2 或 3 个字符,您可以执行

sed -i -e 's/example=.\{2,3\}/example=000/' case 
Run Code Online (Sandbox Code Playgroud)

或使用扩展正则表达式 ( ERE) ( sed -E):

sed -i -E -e 's/example=.{2,3}/example=000/' case 
Run Code Online (Sandbox Code Playgroud)