在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
答案 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