Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux-仅在最后一行添加/插入一个新值,使原始内容在同一文件中保持不变_Linux_Unix_Sed_Vi_In Place - Fatal编程技术网

Linux-仅在最后一行添加/插入一个新值,使原始内容在同一文件中保持不变

Linux-仅在最后一行添加/插入一个新值,使原始内容在同一文件中保持不变,linux,unix,sed,vi,in-place,Linux,Unix,Sed,Vi,In Place,我需要在同一文件的第二行最后一行添加/插入新内容值,而不删除文件的任何行或内容 条件是文件内容不断更改,行号不保持固定 示例文件: 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/li

我需要在同一文件的第二行最后一行添加/插入新内容值,而不删除文件的任何行或内容

条件是文件内容不断更改,行号不保持固定

示例文件:

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
谢谢你的帮助

要将新内容行作为倒数第二行插入文件,请使用下面的Perl one行。用法示例:

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

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

另见:

我正在寻找一个linux命令,该命令将在文件的最后一行添加文本新内容,而不管文件的行数/内容是否动态变化。您的意思是用新内容替换该行,还是将新内容附加到该行,还是将新内容插入到文件的最后一行?请向我们显示您所需的输出。@下面的Beta是所需的输出,但条件是文件内容不断更改,我希望每次仅在最后一行追加字符串,而不删除现有内容,并且在同一文件中:library_path=usr/lib/1.0 if test-n/usr/local/lib64;然后:${PATH=${HOME}/lib:/usr/local/lib64}否则:${L_PATH=${HOME}/lib}fi如果test-n/usr/local/libs;然后:${PATH=${HOME}/lib:/usr/local/}fi comment1 comment2 comment3 comment4如果VAL${PATH};然后PATH=${L_PATH}else PATH=${LD_PATH}:${Y_PATH}fi新内容导出LD_PATH我希望新内容行是同一原始文件myfile.txt的一部分,而不是新文件中的一部分。。。。。我正在寻找一个相当于sed的-i@AutomationEngr添加了一个使用-i开关的方法,而不使用临时文件。这个Perl选项类似于sed-i。@TimurShtatland很棒,这就是我想要的。sed-我的pc的linux版本有一些问题,所以我想我会使用perl,再次感谢。