Ssh
如何使我的 sed 命令在 GNU 中工作 在 BSD 中工作
我的 ~/.ssh/config 中有一個塊內容。以“# BEGIN AUTO GENERATED CONTENT”行開頭,以“# END AUTO GENERATED CONTENT”行結束
我有一個命令替換這兩行之間的內容,內容從名為“config”的文件中讀取
sed -i -ne '/# BEGIN AUTO GENERATED CONTENT/ {p; r config' -e ':a; n; /# END AUTO GENERATED CONTENT/ {p; b}; ba}; p' ~/.ssh/config
它在 ubuntu 中執行良好,但在我使用 bsd sed 的 mac 中無法執行。它給出了這個錯誤資訊:
sed: 1: "/# BEGIN AUTO GENERATED ...": unexpected EOF (pending }'s)
我需要更正此命令才能在 bsd 中工作。不在mac中使用gsed
首先,由於您使用的是 Mac,因此單獨的
-i
選項將不起作用。您需要為其提供一個值,在您的情況下是一個空值。其次,由於開關已生效,因此可以根據您的情況將該
p;b
對更改為。從那以後,分支命令不能很好地與舊的右大括號結合起來。p;d``-n``b``seds
$ sed -i '' -ne '/# BEGIN AUTO GENERATED CONTENT/{' -e 'p;r config' -e ':a;n' -e '/# END AUTO GENERATED CONTENT/{' -e 'p;d' -e '}' -e 'ba' -e '}' -e 'p' ~/.ssh/config
除非這是一種使用並拋出的東西,否則最好在文件中重寫它,然後呼叫:
$ sed -i '' -nf ./code ~/.ssh/config $ cat ./code /# BEGIN AUTO GENERATED CONTENT/{ p r config :loop n /# END AUTO GENERATED CONTENT/{ p d } bloop } p