用sed替换文本文件中的一行

时间:2013-10-23 04:13:53

标签: bash sed

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

举一个人为的例子。

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

  1. 玛丽
  2. 已经
  3. A Little
  4. 兰姆
  5. 我想将第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定义为变量,所以我不必在任何地方改变我的值。

2 个答案:

答案 0 :(得分:6)

使用双引号:

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

单引号可防止变量扩展。

答案 1 :(得分:5)

awk版本

$ cat file
Mary
Had
A Little
Lamb

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