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
我需要在同一文件的倒数第二行 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