簡體   English   中英

GNU sed 匹配未轉義字符的行

[英]GNU sed matching lines with unescaped characters

我遇到了 SED 的問題,它的表現並不完全符合我的預期。 我正在嘗試在比賽后將 append 換行(使用換行符,\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 匹配到“[服務]”。 我無法匹配“服務”,否則它將多次寫入 output(它將與以下行匹配:[Service] 和行“Environment="SERVICEMAINCLASS=com.GoogleFoo.service.foo.ServiceRunner ""。我建立了一個更簡單的文件來處理表達式以查看它出錯的地方,我能找到的最好的是括號是一個未轉義的字符。

我嘗試了兩個給出不同結果的命令。 (結果-> Imgur 鏈接

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

我的命令哪里出錯了? 我嘗試用各種引號和其他轉義字符將模式封裝起來,但迄今為止還沒有奏效。 有輸入嗎?

干杯,邁克

使用這個 -

sed 's/^\[Service\]/&\nRestart=on-failure\nRestartSec=60/' foo.service

輸出

[Unit]
Description=Foo
After=network.target

[Service]
Restart=on-failure
RestartSec=60
User=UserFoo
[...]

解釋

  • 您需要轉義方括號,因為sed將這些視為class字符
  • &是替換中的匹配項

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM