【问题标题】:Replace first line in text file using sed使用 sed 替换文本文件中的第一行
【发布时间】:2017-12-20 09:18:26
【问题描述】:

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

在被替换的行中必须是$variable。

【问题讨论】:

  • 这个问题没有显示任何研究工作。
  • 请出示您的代码。由于 Stack Overflow 向您隐藏了关闭原因:寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及在问题本身。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example
  • sed 真的不是为此而设计的;您不能将变量传递给sed,您只能动态构建sed 脚本,这意味着您负责转义$variable 中需要转义的任何字符。
  • 您可以使用 systemd-escape 轻松转义变量。

标签: linux bash sed


【解决方案1】:
var1=$(systemd-escape $var) 
sed -ri '1s@^.*$@'"$var1"'@' filename

在 $var 引用您的动态变量的地方,我们专注于第一行,然后用 var 变量替换从该行的开头到结尾的任何内容。注意单引号的位置,它将包含变量扩展为 sed 语句。

【讨论】:

  • 添加“带和大括号”,您可以使用 systemd-escape 转义变量 var 和返回的变量的引号 (var1)
  • systems-escape 旨在创建有效的systemd 单位名称,而不是sed 命令。
【解决方案2】:

安全地做到这一点的唯一(相当简单的)方法是

  1. 删除第一行。
  2. 将修改后的文件与新的第一行合并到一个临时文件中。
  3. 用临时文件替换原始文件。

一种方法是

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

【讨论】:

  • 如果您要使用临时文件,最好在 /tmp 中创建文件或在使用后删除临时文件。
  • 临时文件被删除,因为它被重命名为(从而覆盖)原始文件。
猜你喜欢
  • 2013-11-01
  • 2019-03-22
  • 2021-09-25
  • 2022-10-21
  • 1970-01-01
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多