Как удалить строку (запись) из файла с помощью php
Я хочу удалить строку с уникальным идентификатором в конце строки. как удалить строку? Есть ли в 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 ответа
С помощью awk (например, удаление строки #4)
awk -v uniq="#4" '$NF!~uniq' file > temp && mv temp file
в PHP вы можете перебрать файл и найти идентификатор с помощью регулярного выражения: "#\d+$"
или вы можете разбить строку на пробел и проверить, что последний элемент не является указанным вами уникальным номером.
Голый 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');
Что-то вроде
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
}
}
С grep
:
grep -v '#3$' filename
С sed
:
sed -e '/#3$/d' filename
удалить только строку с #3
в его конце.