将Perl命令输出重定向到文件

时间:2017-12-27 07:26:20

标签: bash perl

在bash脚本中,我尝试在每个文件上调用以下Perl命令,然后我想将Perl命令的输出重定向到该文件。

Perl命令只是removes the comments from the file。当它打印到控制台时它似乎工作。但是当我尝试将输出重定向到每个单独的文件时,该文件变为空。我在这里做错了什么?

#!/usr/bin/env bash

shopt -s globstar
for file in ./**/*.java; do
    perl -0pe 's|//.*?\n|\n|g; s#/\*(.|\n)*?\*/##g; s/\n\n+/\n\n/g' "$file" > "$file";
done

1 个答案:

答案 0 :(得分:2)

您正在尝试从文件中读取并尝试将输出重定向到同一文件。这不起作用。 Shell首先打开文件进行写入,现在当Perl尝试从文件中读取时,没有任何内容,因此没有输出。

您可以使用Perl的-i选项进行就地编辑。

perl -i.bak -0pe 's|//.*?\n|\n|g; s#/\*(.|\n)*?\*/##g; s/\n\n+/\n\n/g' "$file"

这将直接编辑文件,并且还具有.bak扩展名的文件的原始副本。如果您不需要任何备份,只需使用-i代替-i.bak