我需要添加/插入一个值"新内容";在同一文件的倒数第二行,而不删除我的文件的任何行或内容。
条件是文件内容不断变化,行号不固定
示例文件:
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 content
0具有整个输入文件内容,每个数组元素1行@a[0 .. ($#a-1)]
:第1行至倒数第二行(含(。请注意,Perl中的数组是0索引的$a[-1]
:最后一行。
另请参阅:perldoc perlrun
:如何执行Perl解释器:命令行切换