我想将模式“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