【问题标题】:how to delete a line(record) from a file using php如何使用php从文件中删除一行(记录)
【发布时间】:2011-06-25 13:03:37
【问题描述】:

我想删除行尾具有唯一 ID 的行。如何删除该行? php中有sed或awk的实现吗?我的文件结构如下

1 0 * * * echo -n "cron 1" > /www/apache/logs/error_log #1
0 */2 * * * /home/user/test1.pl #2
1 0 * * * echo -n "cron 2" > /www/apache/logs/error_log #3
0 */2 * * * /home/user/test2.pl #4
1 0 * * * echo -n "cron 3" > /www/apache/logs/error_log #5
0 */2 * * * /home/user/test3.pl #6

在上面的示例中,唯一 id 位于每一行的末尾,带有“#”,后跟整数 id 值。如何通过唯一键识别来删除一行?谢谢。

【问题讨论】:

  • 惊喜! php可以使用system()函数运行外部程序
  • 用 sed 标记了您的问题,& awk 已经是跨平台的大减号

标签: php file sed awk file-processing


【解决方案1】:

使用 awk,(例如删除 #4 行)

awk -v uniq="#4" '$NF!~uniq' file > temp && mv temp file

在 PHP 中,您可以迭代文件并使用正则表达式查找 id:"#\d+$",或者您可以在空格处拆分行并检查最后一个元素是否不是您指定的 uniq 编号。

【讨论】:

    【解决方案2】:

    喜欢

    foreach($lines as $line){
        if(preg_match("/#(\d+)/$"), $line, $matches) && ($matches[1]==$drop_line_num)){
            #DON'T write line in output file
        }else{
            #write line to output file
        }
    }
    

    【讨论】:

      【解决方案3】:

      grep:

      grep -v '#3$' filename

      sed:

      sed -e '/#3$/d' filename

      只删除末尾带有#3 的行。

      【讨论】:

        【解决方案4】:

        裸 PHP 就可以了。

        function removeTaggedLine ($tag, $file_name)
        {
            $lines = preg_grep ("/#$tag$/", file ($file_name, FILE_IGNORE_NEW_LINES), PREG_GREP_INVERT);
            file_put_contents ($file_name, join ("\n", $lines) . "\n");
        }
        
        removeTaggedLine ('3', 'name of the file');
        

        【讨论】:

          猜你喜欢
          • 2022-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-08
          • 2017-10-01
          相关资源
          最近更新 更多