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

发布于 2024-10-16 17:35:58 字数 465 浏览 8 评论 0原文

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

I want to delete a line which has unique id at the end of the line. how to delete the line? Is there any implementation of sed or awk in php? my file structure is as follows

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

in the above example unique id is at the end of each line with "#" followed by the integer id value. How to delete a line by identifying with its unique key? Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

谁人与我共长歌 2024-10-23 17:35:59

在 PHP 中使用 awk(例如删除 #4 行)

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

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

with awk, (eg deleting #4 line )

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

in PHP, you can iterate the file and look for the id with regex : "#\d+$", or you can split the line on whitespace and check that the last element is not the uniq number you specified.

风尘浪孓 2024-10-23 17:35:59

有点像

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

Smth like

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
    }
}
放低过去 2024-10-23 17:35:59

使用grep

grep -v '#3$' filename

使用sed

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

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

With grep:

grep -v '#3$' filename

With sed:

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

to remove only the line with a #3 at its end.

待天淡蓝洁白时 2024-10-23 17:35:59

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

Bare PHP will do.

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');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文