如何使用php从文件中删除一行(记录)

时间:2011-02-11 12:45:28

标签: php file sed awk file-processing

我想删除一行在行尾有唯一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值。如何通过标识其唯一键来删除一行?感谢。

4 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

像Smth一样

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
    }
}

答案 2 :(得分:1)

使用grep

grep -v '#3$' filename

使用sed

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

仅删除末尾有#3的行。

答案 3 :(得分:1)

裸露的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');