【问题标题】:Replacing a line in a text file with sed [duplicate]用 sed 替换文本文件中的一行 [重复]
【发布时间】:2013-11-01 04:43:04
【问题描述】:

我有一些 bash 变量,我想替换我拥有的文本文件中的一些行 只有这些变量的值。

举一个人为的例子。

假设我有一个名为 test 的文件(数字表示行号,而不是文件中的文本。)

  1. 玛丽
  2. 曾经
  3. 一点点
  4. 羔羊

我想将第 3 行替换为行 45 56。在我存储的 bash 文件中 XL=45 和 XU=56 我试过了

XL=45
XU=56
sed -i '3s/.*/ $XL $XU/' test 

但是,这会将第三行替换为 $XL 和 $XU 而不是它们的实际值。 我该怎么做呢?

我知道显而易见的解决方案是将 sed 命令中的 $XL 和 $XU 替换为 实际值,但我想在我的长文本文件中替换许多这样的行。所以我想将 XL 和 XU 定义为顶部的变量,这样我就不必到处更改我的值了。

【问题讨论】:

    标签: bash sed


    【解决方案1】:

    使用双引号:

    sed -i "3s/.*/ $XL $XU/" test
    

    单引号防止变量扩展。

    【讨论】:

      【解决方案2】:

      awk 版本

      $ cat file
      Mary
      Had
      A Little
      Lamb
      
      $ awk 'NR==3 {$0=l}1' l="$XL $XU" file
      Mary
      Had
      45 56
      Lamb
      

      【讨论】:

      • +1 表示不允许代码注入。
      • @anishsane 感谢您的编辑 :)
      猜你喜欢
      • 2019-10-01
      • 2017-12-20
      • 2014-06-28
      • 2022-10-21
      • 2019-03-22
      • 1970-01-01
      • 2021-03-16
      • 2017-06-06
      • 2020-01-19
      相关资源
      最近更新 更多