【问题标题】:Command-line recursive code cleanup, '){' to ') {', using grep/sed命令行递归代码清理,'){' 到 '){',使用 grep/sed
【发布时间】:2014-02-05 19:25:02
【问题描述】:

我正在尝试通过在 ) 和 { 之间全局添加一个空格来清理我的代码并使其保持一致。例如:

function (args){ -> function (args) {
while(1){ -> while(1) {
foreach($a in $b){ -> foreach($a in $b) {

我正在尝试通过命令行将一些东西放在一起,这些东西将通过文件夹并将此规则递归地应用于所有文件,方法是搜索“){”并替换为“){”,使用 sed 的某种组合并查找/grep。

这样做的正确方法是什么?由于 sed、find/grep 或 shell,我不确定什么需要转义。

如果重要的话,shell 是 Bash,代码是偶尔生成 javascript 的 php。我做了一个快速的 grep 以查看可能出现的情况,并且 看起来 可以进行这种常规搜索/替换,但如果有人看到潜在的问题,我会喜欢指针。 :)

谢谢! :)

编辑添加:使用 grep/sed/find 以外的常见 linux 程序的解决方案绝对非常受欢迎,这正是我要开始的。谢谢! :)

【问题讨论】:

  • 你考虑过使用代码美化器吗?快速的谷歌搜索似乎显示有一些可用于 PHP - 也可能会清理代码中的其他不一致之处。

标签: regex sed grep


【解决方案1】:

你可以试试这个 sed:

sed -i.bak 's/){/) {/g' file

要使其递归使用 find:

find -type f -exec sed -i.bak 's/){/) {/g' '{}' +

【讨论】:

  • 为什么不用-e 加上/g 后缀呢?为什么不用+ 代替\;
  • 盲目地执行了一点,它奏效了。真的很期待我真正理解那条线的那一天。谢谢!! :)
  • @JonathanLeffler:感谢采纳您的所有建议。
  • 对于像我这样的新手:如果您取出“.bak”(将 -i.bak 更改为 -i),它不会生成备份文件。
  • 是的-i.bak 是为了安全措施,只有在出现问题时我们才能恢复原始文件。但是是的,它可以完全跳过。
【解决方案2】:

你可以这样做:

find . -type f -print |
while IFS= read -r file
do
    beautify "$file" > /usr/tmp/tmp$$ &&
    mv /usr/tmp/tmp$$ "$file"
done

只需将“美化”替换为您想要调用的任何工具来清理您的代码。谷歌“PHP 代码美化器”找到一个或使用一些 sed 命令,如果您对此感到满意,例如:

find . -type f -print |
while IFS= read -r file
do
    sed 's/){/) {/g' "$file" > /usr/tmp/tmp$$ &&
    mv /usr/tmp/tmp$$ "$file"
done

如果您找不到可以从 UNIX 调用的 PHP 美化器,那么像“cb”或“indent”这样的 C 美化器可能会完成这项工作。

请注意,如果您的文件名包含换行符,上述方法将不起作用。如果这是一个问题,有解决方法。

【讨论】:

    猜你喜欢
    • 2010-10-16
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    相关资源
    最近更新 更多