将换行符添加到文本文件末尾的 Perl 脚本

Perl script to add newline to end of textfile

我尝试制作一个 perl 脚本,在文本文件的末尾添加一个换行符,然后写入以下内容:

/bin/false

文件如下所示:

/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/tmux
/usr/bin/screen

我试过运行以下脚本:

perl -pi -e 's///usr//bin//screen///usr//bin//screen"\n"//bin//false/g' /etc/shells

但没有任何运气。它不接受换行符,只是 returns 语法错误。你能帮忙吗!?

这个:

s///usr//bin//screen///usr//bin//screen"\n"//bin//false/g

确实有语法错误。从你使用 double 的事实开始 路径上的障碍,你应该逃脱它们的地方(\/),还有 中间奇怪的换行符。你也可以使用其他 分隔符而不是正斜杠,以避免必须全部转义。

s!/usr/bin/screen\n!/usr/bin/screen\n/bin/false!

此外,不要忘记关闭最后一行。你也可以使用 \K (有关详细信息,请参阅 perldoc perlre)以简化您的正则表达式,最终 结果:

s!/usr/bin/screen\n\K!/bin/false\n!

但无论如何,这似乎有点过分了。您可以使用 shell 功能 通过附加 >>:

来回显一行并重定向到一个文件
echo /bin/false >> /etc/shells