2017-07-15 473 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