【发布时间】:2020-10-03 14:43:35
【问题描述】:
我在使用 SED 时遇到了一个问题,它的行为与我预期的不太一样。我试图在比赛后附加到行(使用换行符,\n)。我正在尝试为我们所有部署的机器以及所有未来的机器自动修复服务文件(嗯,直到供应商修复它)。
假设我有一个名为“foo.service”的文件,如下所示:
[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""。我构建了一个更简单的文件来处理表达式,看看哪里出了问题,我能找到的最好的就是括号是一个未转义的字符。
我尝试了两个给出不同结果的命令。 (结果 -> Imgur Link)
sed -i "/[abc]/aRestart=on-failure\nRestartSec=60" TestFile && cat TestFile
sed -i "/abc/aRestart=on-failure\nRestartSec=60" TestFile.bak && cat TestFile.bak
其中 testFile 和 TestFile.bak 是同一个文件
[abc]
cde
efg
ghi
我的命令哪里出错了?我尝试用各种引号和其他转义字符将模式封装起来,但迄今为止还没有奏效。有什么意见吗?
干杯, 迈克
【问题讨论】:
标签: regex linux sed terminal gnu