php - 用于删除整个目录中起始字符和结束字符之间的所有文本的 Shell 脚本或命令

标签 php linux shell command-line comments

寻找一种简单的方法来删除我的所有 TODO:整个脚本目录中的注释。

如果我有:

/*
TODO: Some text here
Some more Here
Some more Here
*/

我想删除/* 之间的所有内容 */ 没什么大不了的,只是想减少文件大小

最佳答案

从这里开始:

$file = 'somefile.php';

$f = fopen($file,'r');
$temp = dirname($file).'/temp.php';
print_r($temp);
$t = fopen($temp, 'w');

$mode = 'write';
$buffer = [];
while($line=fgets($f)){
    print_r($mode."\n");
    switch($mode){
        case 'write':
            if(preg_match('/^\s*\/\\*/', $line)){
                $buffer[] = $line;
                $mode = 'comment';
            }else{
                fputs($t,$line);
            }
        break;
        case 'comment': 
            if(preg_match('/^\s*\\**\s*@TODO/i', $line)){
                $buffer = [];
                $mode = 'skip';
            }else if(preg_match('/^\s*\\*\//', $line)){
                fwrite($t,implode("", $buffer));
                $buffer = [];
                fputs($t,$line);
                $mode = 'write';
            }else{
                $buffer[] = $line;
            }
        break;
        case 'skip':
            if(preg_match('/^\s*\\*\//', $line)){
                $mode = 'write';
            }
        break;
    }
}
/*
fclose($t);
fclose($f);
rename($temp, $file);
*/

我针对这个文件进行了测试

<?php
$var= "foo";

/*
 @todo hello
 some other shuff
 */



/**
 * 
 * @author Me
 *
 */
class someclass{



}

这是temp.php中的内容

<?php
$var= "foo";




/**
 * 
 * @author Me
 *
 */
class someclass{



}

希望有帮助。在尝试此操作之前我可能会备份您的文件。

更新

必须修复一些小问题,这样它就会跳过没有 @todo 的注释。其余的你可能可以相当容易地解决。

正则表达式仅用于解释像这样的空格或注释

/*
* @todo
*/

对于正则表达式引擎,此 \\* 变为 \*,然后变为文字 *

所以这个\s*\/\\*

  • \s* - 无空格或多个空格
  • \/ - / 字面意思
  • \\* - 字面上的 *

或者用英文表示 /* 打开注释标签。

我提到这一点是因为正则表达式很棘手,但其中可能有空格和其他内容,可能每个 @todo 都不是该行的第一件事。

这样做,您可以单独处理每一行,它简化了事情,更重要的是提高了匹配准确性。

关于php - 用于删除整个目录中起始字符和结束字符之间的所有文本的 Shell 脚本或命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52284502/

相关文章:

bash - bash可以向终端输入写入命令吗?

javascript - PHP处理后不会自动重新加载

javascript - $_POST 没有返回值

regex - 如何使用awk或sed,在文中最后一个符号}前添加内容

linux - 将信息从我的程序传递到调用脚本(退出时)的正确方法是什么

python - cx_freeze exe无限时间运行而不停止

php - 奇怪的意外 '$dbname' (T_VARIABLE)

php - Laravel 分页链接()不起作用

c - valgrind,总堆使用量不断增加

linux - 如何在 Linux 中更改文本顺序?