Linux-只在最后一行添加/插入一个新值,以保持原始内容在同一文件中的完整性



我需要添加/插入一个值"新内容";在同一文件的倒数第二行,而不删除我的文件的任何行或内容。

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

示例文件:

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

感谢您的帮助!!

插入"CCD_ 1";行作为文件的倒数第二行,使用下面的Perl一行。用法示例:

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

输入:

foo
bar
baz

输出:

foo
bar
new content
baz

Perl单行使用以下命令行标志:
-e:neneneba告诉Perl在线查找代码,而不是在文件中查找代码
-n:一次循环输入一行,默认情况下将其分配给$_
-i.bak:就地编辑输入文件(覆盖输入文件(。在覆盖之前,通过在原始文件的名称后附加扩展名.bak来保存原始文件的备份副本。

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

另请参阅:
perldoc perlrun:如何执行Perl解释器:命令行切换

相关内容

最新更新