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

0 bash sed

我有一些bash变量,我想用一个只有这些变量值的文本文件替换一些行.

举一个人为的例子.

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

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

我想用线替换第3行45 56.在我的bash文件中,我存储了XL = 45和XU = 56,我试过了

XL=45
XU=56
sed -i '3s/.*/ $XL $XU/' test 
Run Code Online (Sandbox Code Playgroud)

然而,这将使用$ XL和$ XU替换第三行而不是实际值.我该怎么做呢?

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

dev*_*ull 6

使用双引号:

sed -i "3s/.*/ $XL $XU/" test
Run Code Online (Sandbox Code Playgroud)

单引号可防止变量扩展.


Jot*_*tne 5

一个awk版本

$ cat file
Mary
Had
A Little
Lamb

$ awk 'NR==3 {$0=l}1' l="$XL $XU" file
Mary
Had
45 56
Lamb
Run Code Online (Sandbox Code Playgroud)

  • +1不允许代码注入. (2认同)