Sed 替换模式和文件末尾之间的模式

Sed 替换模式和文件末尾之间的模式

SED:在最后一行之后插入文本? - Unix 和 Linux 堆栈交换,我了解到$如果在 sed 外部使用,则替换代表文件结尾。我尝试在下面使用它来替换文件末尾abc之后和之前发生的所有事件# Start123

代码:

file=Data.txt
Initial="# Start";
Final='\$'
orig="abc";
new="123"; 
sed -i -r -e "\!${Initial}!,\!${Final}!{s!${orig}!${new}!g}" ${file} ;

数据.txt

# Start

abc
abc

$

abc
abc

输出:

# Start

123
123

$

abc
abc

预期输出:

# Start

123
123

$

123
123

我缺少什么?即如何告诉 sed 这$意味着文件结束?


注意:我正在转义$,因为我在 sed 表达式中使用双引号(为了更安全的变量扩展)。我希望这是正确的。你能对此发表评论吗?

答案1

这有效:(注意:${Final}而不是/${Final}/

file=Data.txt
Initial="# Start";
orig="abc";
new="123"; 
Final='$' # Line Number
sed -r -e "/${Initial}/,${Final}s/${orig}/${new}/g" ${file} 

相关内容