sed 一个模式后跟任何单个字符一次或多次

sed 一个模式后跟任何单个字符一次或多次

我想将模式“uid=”替换为任意单个字符一次或多次。所以我使用这个命令:

sed s/uid=.+/uid=something/g file

但这是行不通的。看来“跟随着任何单个字符一次或多次”是不正确的,也就是说.+

知道为什么吗?

答案1

对于 BSDsed或最新版本的 GNU 和 busybox sed,您可以使用

sed -E 's/uid=.+/uid=something/'

匹配单个字符一次或多次。

启用-E的标志sed扩展正则表达式。没有它你会得到基本正则表达式。两套正则表达式语法基本相同,但使用的语法略有不同,并且扩展集支持更多运算符。

这将取代

uid=110

uid=something

如果你想匹配相同的字符 -- 不适用于 BSD sed--:

sed -E 's/uid=(.)\1*/uid=something/'

这将取代

uid=110

uid=something0

标准 ERE 没有反向引用。 GNUsed支持它作为扩展,但不支持 BSD sed。不过,反向引用是标准 BRE 的一项功能,因此您可以执行以下操作:

sed 's/uid=\(.\)\1*/uid=something/'

便携式。

答案2

sed 's/uid=..*/uid=something/g' file

或者:

sed 's/uid=.\{1,\}/uid=something/g' file

对于 posix sed

相关内容