免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 12278 | 回复: 9
打印 上一主题 下一主题

请教:怎样修改文本文件某一行的数据?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-21 16:52 |只看该作者 |倒序浏览
我现在有个文件,每行的内容如下:
IP=192.168.1.100
MASK=255.255.255.0
Gateway=192.168.1.1
DNS=192.168.1.1

想修改其中一行数据,如IP=192.168.1.100修改为IP=192.168.10.100,请教各位大虾,有啥子好办法??

论坛徽章:
0
2 [报告]
发表于 2010-12-21 18:44 |只看该作者
lz没人帮你?
sed -i 's/IP=192.168.1.100/IP=192.168.10.100/g' file

论坛徽章:
0
3 [报告]
发表于 2010-12-22 16:17 |只看该作者
回复 2# samlumengjun


    我是通过代码操作的,怎样在C语言中去修改文本文件中的某一行内容?

论坛徽章:
34
亥猪
日期:2015-03-20 13:55:11戌狗
日期:2015-03-20 13:57:01酉鸡
日期:2015-03-20 14:03:56未羊
日期:2015-03-20 14:18:30子鼠
日期:2015-03-20 14:20:14丑牛
日期:2015-03-20 14:20:31辰龙
日期:2015-03-20 14:35:34巳蛇
日期:2015-03-20 14:35:56操作系统版块每日发帖之星
日期:2015-11-06 06:20:00操作系统版块每日发帖之星
日期:2015-11-08 06:20:00操作系统版块每日发帖之星
日期:2015-11-19 06:20:00黄金圣斗士
日期:2015-11-24 10:43:13
4 [报告]
发表于 2010-12-22 17:00 |只看该作者
嵌套 shell 么,或者直接 gcc 生成 C

论坛徽章:
0
5 [报告]
发表于 2010-12-23 11:11 |只看该作者
回复 3# 狼族狼心


    用c的话稍微难一点,我随便写写,你自己去参照修改一下

#include <stdio.h>
#include <sys/stat.h>
#include <string.h>
#include <stdlib.h>

#define MAX_LEN 256
int main( int argc, char **argv )
{
         FILE *modifile;
         int flen;
         struct stat s;
         char line[MAX_LEN], *buf, *tmp;
         if( lstat( argv[1], &s ) < 0 )
                return;
         flen = s.st_size;   /* 文件长度 */
         buf = (char *)malloc(  flen+100 )  /* 预留100个字节可能增加文件长度 */
         if( !buf )
                return;
         memset( buf, 0, flen+100 );
         tmp = buf;    /* 文件小的时候可以不用tmp, 直接strcat拼接字符串 */
         modifile = fopen( argv[1], "r" )
         if( !modifile  )
                return;
         while( !feof(modifile) )
         {
                   if( !fgets( line, MAX_LEN, modifile ) )
                            continue;
                   if( !strstr( line, "IP=" )
                   {
                            strcpy( tmp, line );
                            tmp += strlen( line );
                   }
                   else
                   {
                            sprintf( tmp, "IP=192.168.10.100\n" );
                            tmp += 18; /*  上面这个字符串的长度 */
                    }
          }
          fclose(modifile);
          modifile = fopen( argv[1], "w+" );
          if( !modifile  )
                return;
          fprintf( modifile, "%s", buf );
          free( buf );
          fclose(modifile);
}

论坛徽章:
0
6 [报告]
发表于 2010-12-23 11:50 |只看该作者
操作文本文件...用C来写...  LZ也太勤快了...
       随便抓个支持正则表示的语言来写或者直接用现成的工具来做...

论坛徽章:
0
7 [报告]
发表于 2010-12-23 12:45 |只看该作者
ls
我记得有人说过类似c语言就是盯着一个字符,然后处理,接着再盯着下一个,原话大意就是c是最擅长处理字符的吧。
处理正则表达式的很多工具还不照样是c写的。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2010-12-24 13:07 |只看该作者
有必要吗?这个用c来写。

论坛徽章:
0
9 [报告]
发表于 2010-12-27 11:05 |只看该作者
回复  狼族狼心


    用c的话稍微难一点,我随便写写,你自己去参照修改一下

#include
#include
...
samlumengjun 发表于 2010-12-23 11:11



    五楼的这个恐怕不行吧如果文件达到几十兆上百兆甚至多少G你的这个malloc能成功吗?我有点担心啊。最好写到另外的一个文件中申请空间也不要以文件大小决定,就是固定的大小。然后搜索

论坛徽章:
0
10 [报告]
发表于 2010-12-28 02:22 |只看该作者
回复  狼族狼心


    用c的话稍微难一点,我随便写写,你自己去参照修改一下

#include
#include
...
samlumengjun 发表于 2010-12-23 11:11

神人, 膜拜
为了这个回帖, 你居然专门贴了段代码..
跪拜!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP