Linux- Add/Insert 仅在倒数第二行具有新值,保持同一文件中原始内容的完整性

Linux- Add/Insert in only the secondlast line with a new value keeping original content intact in same file

我需要在同一文件的倒数第二行 add/insert 一个值“新内容”,而不删除我文件的任何行或内容。

条件是文件内容不断变化,行号不固定

示例文件:

library_path="usr/lib/1.0"
if test -n "/usr/local/lib64"; then
: ${PATH=${HOME}/lib:/usr/local/lib64}
else
: ${L_PATH=${HOME}/lib}
fi
if test -n "/usr/local/libs"; then
: ${PATH=${HOME}/lib:/usr/local/}
fi
##comment1
#comment2
##comment3
#comment4
if vals"${PATH}"; then
  PATH="${L_PATH}"
else
  PATH="${LD_PATH}:${Y_PATH}"
fi
export LD_PATH

我正在尝试以下命令,但它会在文件的每一行插入内容:

sed -i 'x; s/.*/new content/;p;x; $d' myfile.txt

感谢任何帮助!!

要将“new content”行作为倒数第二行插入到文件中,请使用下面的 Perl 单行代码。使用示例:

echo "foo\nbar\nbaz" > in_file
perl -i.bak -ne 'push @a, $_; if ( eof ) { print for ( @a[0 .. ($#a-1)], "new content\n", $a[-1] ); }' in_file

输入:

foo
bar
baz

输出:

foo
bar
new content
baz

Perl 单行代码使用这些命令行标志:
-e : 告诉 Perl 查找内联代码,而不是在文件中。
-n :一次循环输入一行,默认分配给 $_
-i.bak :就地编辑输入文件(覆盖输入文件)。覆盖之前,通过在其名称后附加扩展名 .bak.

来保存原始文件的备份副本

push @a, $_; :将从输入文件中读取的当前行添加到数组 @a 中。因此,在文件末尾 (eof),@a 具有整个输入文件内容,每个数组元素 1 行。
@a[0 .. ($#a-1)] :第 1 行到倒数第二行(含)。请注意,Perl 中的数组是从 0 开始索引的。
$a[-1] : 最后一行。

另见:
perldoc perlrun: how to execute the Perl interpreter: command line switches