如何提取一个文本中两行已知内容之间的内容?

发布于 2022-09-03 08:41:45 字数 790 浏览 23 评论 0

请问如何提取一个文本中两行已知内容之间的内容。
比如在某hosts文件中存在如下内容。

……
Localhost (DO NOT REMOVE)
127.0.0.1    localhost
255.255.255.255    broadcasthost
::1    localhost
fe80::1%lo0    localhost
Modified hosts start
……

我想要提取“Localhost (DO NOT REMOVE)”和“Modified hosts start”中的内容到另外一个文本中。
应该怎么解决呢?我使用的如下代码哪里有问题呢?

char str[256],start1[256],end1[256];
    strcpy(start1,"# Localhost (DO NOT REMOVE)");
    strcpy(end1,"# Modified hosts start");
    while (!feof(fstream_backup)){
        fgets(str,1024,fstream_backup);
        if (strcmp(str, start1)==0){
            while (strcmp(str, end1)!=0){
                fgets(str,1024,fstream_backup);
                fprintf(fstream_out,"%s",str);
            }
            
        }
    }

谢谢。

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

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

发布评论

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

评论(2

陈甜 2022-09-10 08:41:45
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
    bool flag = false;
    ifstream file1("file1.txt");
    ofstream file2("file2.txt");
    string line, des1("Localhost (DO NOT REMOVE)"), des2("Modified hosts start");
    while (getline(file1, line)) {
        if (line == des1) {
            flag = true;
            continue;
        }
        if (line == des2)
            break;
        if (flag)
            file2 << line << endl;
    }
    file1.close();
    file2.close();
}

既然是C++下,建议这样写。

﹏雨一样淡蓝的深情 2022-09-10 08:41:45

这样的需求为什么要用c++这么笨重的语言,shell就可以优雅的搞定了
下面语句可以输出line1和line5之间的文本

cat file1 | sed -n /line1/,/line2/p | sed /line1/d | sed /line2/d > file2
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文