2017-07-15 86 views
-6

我想用sed替換另一個文本文件中的第一行。使用sed替換文本文件中的第一行

在被替換的行中必須是$ variable。

+1

[閱讀如何創建一個最小的,完整的,和可驗證的例子。](https://stackoverflow.com/help/mcve) – badiya

+0

這個問題並沒有顯示任何研究工作。 – melpomene

+0

請顯示您的代碼。由於Stack Overflow隱藏了你的密切原因:*尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現它的最短代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:[如何創建最小,完整和可驗證的示例](https://stackoverflow.com/help/mcve)。* – jww

回答

-1
var1=$(systemd-escape $var) 
sed -ri '[email protected]^.*[email protected]'"$var1"'@' filename 

其中$ var引用您的動態變量,我們專注於第一行,然後用var變量替換行的開頭到結尾的任何內容。注意包含將變量擴展到sed語句中的單引號的位置。

+0

讓'$ var'不加引號通常不起作用。 – chepner

+0

添加「腰帶和大括號」,可以使用systemd-escape和變量返回的變量(var1) –

+0

'system-escape'來設置爲創建有效的'systemd'單元名稱,而不是'sed'命令。 – chepner

0

唯一的(相當簡單)的方式來安全地做,這是

  1. 刪除的第一行。
  2. 將修改後的文件與新的第一行組合在一個臨時文件中。
  3. 用臨時文件替換原始文件。要做到這一點

一種方法是

{ printf '%s\n' "$variable"; sed '1d' original.txt; } > tmp.txt && mv tmp.txt original.txt 
+0

如果您要使用臨時文件,最好在/ tmp中創建文件或在使用後刪除臨時文件。 –

+0

臨時文件*被刪除,因爲它被重命名爲(從而覆蓋)原始文件。 – chepner