Regex GNU-sed与未换格字符的匹配行
我遇到了SED的问题,它的表现与我预期的不太一样。我试图在匹配后附加到行(使用换行符,\n)。我正在尝试为我们所有部署的机器以及所有未来的机器自动修复一个服务文件(好吧,直到供应商修复它) 假设我有一个名为“foo.service”的文件,它如下所示:Regex GNU-sed与未换格字符的匹配行,regex,linux,sed,terminal,gnu,Regex,Linux,Sed,Terminal,Gnu,我遇到了SED的问题,它的表现与我预期的不太一样。我试图在匹配后附加到行(使用换行符,\n)。我正在尝试为我们所有部署的机器以及所有未来的机器自动修复一个服务文件(好吧,直到供应商修复它) 假设我有一个名为“foo.service”的文件,它如下所示: [Unit] Description=Foo After=network.target [Service] User=UserFoo Environment="SERVICENAME=foo" Environment="SERVICEPATH=
[Unit]
Description=Foo
After=network.target
[Service]
User=UserFoo
Environment="SERVICENAME=foo"
Environment="SERVICEPATH=/opt/foo"
Environment="SERVICEMAINCLASS=com.GoogleFoo.service.foo.ServiceRunner
我需要将sed与“[服务]”匹配。我无法与“Service”匹配,否则它将多次写入输出(它将与行:[Service]和行“Environment=“SERVICEMAINCLASS=com.GoogleFoo.Service.foo.ServiceRunner”匹配.我建立了一个简单得多的文件来处理表达式,以查看哪里出了问题,我能找到的最好结果是括号是一个未转义的字符
我尝试了两个命令,它们给出了不同的结果。(结果->)
其中testFile和testFile.bak是同一个文件
[abc]
cde
efg
ghi
我的命令哪里出了问题?我尝试过用各种引号和其他转义字符来封装模式,但到目前为止还没有成功。有什么输入吗
干杯,
迈克带着这个-:
输出
解释
- 您需要转义方括号,因为
将它们视为一类字符sed
是替换中匹配的&
-E
开关
[abc]
cde
efg
ghi
sed 's/^\[Service\]/&\nRestart=on-failure\nRestartSec=60/' foo.service
[Unit]
Description=Foo
After=network.target
[Service]
Restart=on-failure
RestartSec=60
User=UserFoo
[...]