sed 命令不更新文本文件

use*_*523 2 regex unix shell sed hp-ux

我想问一下,因为我在 unix 脚本中使用 sed 命令时遇到问题。

#!/bin/sh
cnt=2
sed '1 c\
$cnt' test.txt
Run Code Online (Sandbox Code Playgroud)

我想用变量 cnt 的值(即 2)替换文本文件 test.txt 的第一行。如何在上述 sed 命令中传递该变量?sed 命令将 $cnt 视为字符串。

cho*_*oba 5

变量不会用单引号展开。不过,它们是用双引号展开的。

sed "1 c\\
$cnt" test.txt
Run Code Online (Sandbox Code Playgroud)

请注意,sed默认情况下不会更新输入文件,而是输出更改后的版本。如果您的 sed 实现支持它,请使用该-i开关来修改输入文件。否则,您必须将输出重定向到一个新文件并将其重命名回原始名称:

sed "..." text.txt > text.new
mv text.new text.txt
Run Code Online (Sandbox Code Playgroud)