0

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

举一个人为的例子。

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

  1. 玛丽
  2. 一点
  3. 羊肉

我想用第 3 行替换第 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 定义为顶部的变量,这样我就不必在任何地方更改我的值。

4

2 回答 2

6

使用双引号:

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

单引号防止变量扩展。

于 2013-10-23T04:17:35.133 回答
5

一个awk版本

$ cat file
Mary
Had
A Little
Lamb

$ awk 'NR==3 {$0=l}1' l="$XL $XU" file
Mary
Had
45 56
Lamb
于 2013-10-23T04:45:19.187 回答