Perl 1 班轮错误 - 不起作用 - 删除多个字符串

Perl 1 班轮错误 - 不起作用 - 删除多个字符串

任何人都知道 perl one liner 可以删除文件中的单词,例如我有以下内容,它在 linux 上不起作用

$ ssh root\@$host perl -p -e 's/value1/ /' -e 's/value2/ /' /tmp/file

答案1

如果您想更改 的内容/tmp/file,而不是仅在标准输出上显示修改后的输出,您需要使用perl-i选项来“就地”编辑文件。查看man perlrun并搜索-i详细信息。

另外,在使用变量时引用它们(例如$host)。

顺便说一句,您正在将两种不同的模式更改为相同的值(空格)。这不需要两个单独的s///操作。

ssh "root@$host" perl -p -i -e 's/value1|value2/ /' /tmp/file

即使您确实需要两个不同的操作,也可以用分号 ( ;) 将它们分开。

ssh "root@$host" perl -p -i -e 's/value1/foo/;s/value2/bar/' /tmp/file

如果要制作原始文件的备份副本,-i请使用可选后缀。例如

ssh "root@$host" perl -p -i.bak -e 's/value1|value2/ /' /tmp/file

/tmp/file/tmp/file.bak将在被 perl 编辑之前被复制到。


您可以使用 来同样轻松地完成此操作,并且速度稍快(可能不明显,除非在循环中运行多次),sed它也有一个等效的-i选项。

man sed

-i[后缀], --in-place[=后缀]

就地编辑文件(如果提供了后缀,则进行备份)

ssh "root@$host" sed -i -e 's/value1\|value2/ /' /tmp/file

或使用 sed 的-E扩展正则表达式 (ERE) 选项

ssh "root@$host" sed -i -E -e 's/value1|value2/ /' /tmp/file

顺便说一句,您可以像在 perl 中一样使用 a 分隔多个 sed 命令;

相关内容