【发布时间】:2015-07-11 17:51:27
【问题描述】:
背景
我希望在发送之前从git archive 输出的一些python 源代码文件中删除任何# TODO cmets。我希望通过将在各种 *nix 操作系统上运行的脚本来执行此操作,因此它应该尽可能符合 POSIX。
我知道find -print0 和xargs -0 不在基本规范中,但它们似乎很常见,我可以很好地使用它们(除非存在更好的替代方案)。我正在使用ed,因为sed -i 不在就地编辑的基本规范中。假设下面的命令是从一个已经解压的 git 存档的目录中运行的。
我很高兴有一个完整的替代解决方案来剥离# TODO cmets,但为了满足我的好奇心,我还想回答我在使用我提出的命令时遇到的特定问题和。
现有代码
find . -type f -name "*.py" -print0 | xargs -0 -I {} ed -s {} << 'EOF'
,g/^[ \t]*#[ \t]*TODO/d
,s/[ \t]*#[ \t]*TODO//
w
EOF
预期结果
所有以“.py”结尾的文件都被删除了仅包含 TODO cmets 或以 TODO 开头的行尾 cmets 的完整行。
实际结果
(标准输出)
,g/^[ \t]*#[ \t]*TODO/d
,s/[ \t]*#[ \t]*TODO//
w
: No such file or directory
当前理论
我相信<< 'EOF' heredoc 被应用于xargs 而不是ed,我不知道如何解决这个问题。
【问题讨论】:
标签: find posix xargs heredoc ed