【问题标题】:Redirect Perl command output to file将 Perl 命令输出重定向到文件
【发布时间】:2018-06-07 20:34:01
【问题描述】:

在 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 实际上并没有吞下文件。你应该改用-0777
  • @ikegami 怎么能不逐行处理文件?
  • 阅读$/ = "\0"; (-0) 和$/ = undef; (-0777) 之间的区别。这不是第一个啜饮的意图(也不会总是)。

标签: bash perl


【解决方案1】:

您正在尝试从文件中读取并尝试将输出重定向到同一文件。这不起作用。 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

【讨论】:

  • 谢谢!现在说得通了!
猜你喜欢
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 2016-09-09
  • 2021-09-09
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多