Zei*_*zar 2 sed text-processing regular-expression
我有一个包含一行的文件,我想替换它中间的内容:
database.url=jdbc:mysql://my.sql.ip.address:mySqlPort/mySqlDbName?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
Run Code Online (Sandbox Code Playgroud)
假设我要更改IP地址;我使用了以下sed
命令:
sed -i -r 's/(database.url=jdbc:mysql:\/\/).+(:.+)/\1zizi/' myFile
Run Code Online (Sandbox Code Playgroud)
这输出:
database.url=jdbc:mysql://zizi
Run Code Online (Sandbox Code Playgroud)
但我想要:
database.url=jdbc:mysql://zizi:mySqlPort/mySqlDbName?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
Run Code Online (Sandbox Code Playgroud)
我应该怎么写我的sed
?有没有其他命令可以用来更好地获得它?
也只需打印第二个下一个捕获的组\2
(我不会修改或增强您的sed
)
sed -i -r 's/(database.url=jdbc:mysql:\/\/).+(:.+)/\1zizi\2/' myFile
Run Code Online (Sandbox Code Playgroud)
这是仅更改 IP 匹配部分的改进命令。
sed 's/[1-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/NEWIP/' infile.txt
Run Code Online (Sandbox Code Playgroud)
如果仅对于以 开头的行database.url
:
sed '/^database\.url/ s/[1-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/NEWIP/' infile.txt
Run Code Online (Sandbox Code Playgroud)
或者sed
能力更强,甚至更短。
sed 's/\([1-9]\)\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}/NEW/'
Run Code Online (Sandbox Code Playgroud)
请注意,这也可以更改和改进以匹配精确的 IP 地址而不是匹配。1.1.1.999
作为无效的 IP。