比较文本文件中的字符串的一行,并在找到时删除该行

标签 c linux

我有一个程序可以检测新连接的 IP 并将它们记录在文本文件中..例如

Myconnectedip.txt

New Connection from IP: 192.168.5.20
New Connection from IP: 192.168.5.30

现在我的程序检测到ip 192.168.5.30已经断开。它将更新文本文件并删除该行并更新我的文本文件。

New Connection from IP: 192.168.5.30

现在,当我打开文本文件时,我会看到的唯一一行是

New Connection from IP: 192.168.5.20

如何删除文本文件中的行字符串?

这是我的做法..

char buff[20];
File *fp
fp = fopen("/tmp/Myconnectedip.txt", w+);

while ( fgets( buff, sizeof(buff), fp ) != NULL ) {
        if ( strstr( buff, "Connection Closed from IP: 192.168.5.20" ) != NULL ) {

            //When found how can i remove that line and update my textfile?.

        } else {
            // nothing to do here..
}
}
close(fp);

谢谢你..

最佳答案

您可以像以前一样将每一行逐一复制到 buff 中,然后与要从现有文件中删除的行进行匹配。如果不匹配,则将其复制到某个临时文件。一直执行到 eof()。 您不必复制要从现有文件中删除的行。

之后,只需将临时文件重命名为与之前相同的名称即可。

关于比较文本文件中的字符串的一行,并在找到时删除该行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13065664/

相关文章:

linux - 在 Linux 中为每个文件查找和 tar

linux - xargs 用于管道 ls 命令的输出

c - 使用 pthread 创建线程失败

c - 为什么 050 不等于以下代码段中的 50?

C宏写一个堆栈可变长度结构?

c - 每次都通过追加将数据填充到缓冲区的函数

linux - 如何在 Linux 中显示 .xed 文件?

c - 如何在 C 中调用以函数指针作为参数的函数?

linux - rsyslog 不发送任何信息

linux - 我的脚本问题从 centOS7 上的文本文件添加用户