我需要使用 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 在=
您混淆了*for Shell Filename Expansion和Posix 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)