как удалить строку (запись) из файла с помощью php - PullRequest
0 голосов
/ 11 февраля 2011

Я хочу удалить строку с уникальным идентификатором в конце строки.как удалить строку?Есть ли в 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

. В приведенном выше примере уникальный идентификатор находится в конце каждой строки с "#", за которым следует целое значение идентификатора.Как удалить строку, идентифицируя ее уникальным ключом?Спасибо.

Ответы [ 4 ]

1 голос
/ 13 февраля 2011

Голый 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');
1 голос
/ 11 февраля 2011

что-то вроде

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
    }
}
1 голос
/ 13 февраля 2011

С grep:

grep -v '#3$' filename

С sed:

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

для удаления только строки с #3 в конце.

1 голос
/ 11 февраля 2011

с помощью awk (например, удаление строки # 4)

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

в PHP вы можете выполнить итерацию файла и найти идентификатор с помощью регулярного выражения: "#\d+$", или вы можете разбить строку на пробеле и проверить, что последний элемент не соответствует указанному вами уникальному номеру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...