精华内容
下载资源
问答
  • 在程序中没有选项,我正在从(Arcmap)导出文本文件来更改删除,在文本文件本身中执行查找替换实际上需要2天。我已经搜索了一个脚本来完成这项工作,但它们似乎都用空格替换了word文件的整行,而不是单独替换每个...

    我有一个大约40万行长的文本文件。我需要将此文本文件导入到一个程序中,该程序只接受用空格或制表符分隔的文本文件,但此文本文件用分号分隔。在程序中没有选项,我正在从(Arcmap)导出文本文件来更改删除,在文本文件本身中执行查找和替换实际上需要2天。

    我已经搜索了一个脚本来完成这项工作,但它们似乎都用空格替换了word文件的整行,而不是单独替换每个分号,只留下一个空文本文件。

    以下是我的文本文件示例:"OID_";"POINTID";"GRID_CODE";"POINT_X";"POINT_Y"

    ;1;-56.000000;200900.250122;514999.750122

    ;2;-56.000000;200900.750122;514999.750122

    ;3;-56.000000;200901.250122;514999.750122

    ;4;-57.000000;200901.750122;514999.750122

    ;5;-57.000000;200902.250122;514999.750122

    ;6;-57.000000;200902.750122;514999.750122

    ;7;-57.000000;200903.250122;514999.750122

    ;8;-57.000000;200903.750122;514999.750122

    ;9;-57.000000;200904.250122;514999.750122

    ;10;-57.000000;200904.750122;514999.750122

    我需要它看起来像这样:1 -56.000000 200900.250122 514999.750122

    2 -56.000000 200900.750122 514999.750122

    展开全文
  • c语言实现简易文本编辑器

    万次阅读 热门讨论 2019-01-27 20:39:03
    本程序要求完成一个简易文本编辑器,能够完成文本的录入、编辑、删除、查找,并能够完成文件的存取。 在文本编辑软件中把用户输入的所有文本内容作为一个字符串。虽然各种文本编辑软件的功能有强弱差别,但是基本...

    本程序要求完成一个简易文本编辑器,能够完成文本的录入、编辑、删除、查找,并能够完成文件的存取。

    在文本编辑软件中把用户输入的所有文本内容作为一个字符串。虽然各种文本编辑软件的功能有强弱差别,但是基本操作都包括串的输入、修改、删除(包括整行删除和一行中的子串删除)、查找、输出等。通过分析,系统应该包括以下功能:

    1. 具有简单的文字或图形菜单界面
    2. 能实现串或文本块的查找、替换、删除、插入、移动操作。
    3. 能实现文本文件的存盘和读取功能。
    4. 具有友好的界面和较强的容错能力
    • 设计思路
    1. 采用的逻辑结构

    文本编辑器主要是针对文本进行编辑,文本的操作就是对字符的操作。文本编辑器可以从行、列两个方向进行编辑。

    每一行可以看成一个线性表,线性表是一种线性结构,线性结构的特点是数据元素之间为线性关系,数据元素“一个接一个的排列”。在一个线性表中数据元素的类型是相同的,由于每一行可以存储的最大字数是相同的,行方向所有线性表的最大长度可以设置成相同的。行与行之间的关系也可以看成一个线性表。

    2.采用的存储结构

    线性表的存储分为两种:顺序存储和链式存储。

    顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表的各元素,用这种存储形式存储的线性表称为顺序表。在程序设计语言中,一维数组在内存中占用的存储空间就是一组连续的存储区域,因此,用一维数组来表示顺序表的数据存储区域是再合适不过的。

    链式存储是通过-组任意的存储单元来存储线性表中的数据元素的,为建立数据元系之间的线性关系,对每个数据元素除了存放数据元素自身的信息之外,还需要和一起存放其后继或前驱所在的存储单元的地址,这两部分信息组成一个“结点”,每个元素都如此。存放数据元素信息的称为数据域,存放其前驱或后继地址的称为指针域。只有一个存储单元地址的为单链表,有两个存储单元地址的为双链表。

    考虑到实际的功能需求,每行的线性表可以用顺序存储方式,每个字符是一个节点。用数组的长度表示本行可以输入的最大字符。行与行之间的线性表采用双链表存储,每个节点包括四个区域,一个指针域prior指向上一行,一个指针域next指向下一行,一个数据域num是行号,一个数据域是本行的字符数组。程序以行和列标识文本位置,行采用双向链表存储行信息,用数组下标标识列信息,从而能够准确定位字符位置,然后进行查找、替换、插入、块移动、删除等多种操作。

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define MAX_LEN 100
    #define NOT_FOUND -1
    //定义行结构体:
    struct line
    {
    	char text[MAX_LEN];  //本行文本
    	int num;  //行号
    	struct line *next; //指向下一个行的指针
    	struct line *prior; //指向前一个行的指针
    };
    int lnum;
    struct line *start; 	   //指向线性表中第一行的指针
    struct line *last; 	   //指向线性表中最后一行的指针
    struct line *find(int);    //查找指定行是否存在
    void patchup(int, int);    //对当前行以后的每行的行号加1或
    void delete_text(int);     //删除一行文字
    void list();   //显示文件的全部内容
    void save();   //保存文件
    void load();   //打开文件,初始化线性表
    void insert(char str[], int linenum, int position); //插入文字到一行的中间
    void printline(int linenum);   //打印一行文字
    void deletestr(int linenum, int position, int lenth); //删除一个字符串
    int findstr(char * to_find);  //查找字符串
    int menu_select();        //显示主菜单
    int menu_select_insert();//显示插入功能子菜单
    int menu_select_delete();//显示删除功能子菜单
    int menu_select_print(); //显示打印功能子菜单
    int menu_select_move();  //显示移动功能子菜单
    void enter(int linenum); //插入一行文字
    void enter_empty(int linenum); //插入一个空白行
    //下列函数是系统主函数,提供系统主界面,通过选择项转入执行插入、删除、查存盘、读人文件等功能的界面。
    int main(void)
    {
    	char str[MAX_LEN];
    	int choice;
    	int linenum = 1;
    	int number = 0;
    	start = NULL;
    	last = NULL;
    	load(); //打开文件,初始化线性表
    	do{
    		choice = menu_select();
    		switch (choice)
    		{
    		case 1:		//执行插入功能	
    			choice = menu_select_insert();//显示插入子菜单
    			switch (choice)
    			{
    			case 1:   //插入一行
    				printf("\t行号:");
    				scanf("%d", &linenum);
    				enter(linenum);
    				break;
    			case 2:  //插入到指定行的指定列
    				printf("输入插入位置一行号:");
    				scanf("%d", &linenum);
    				printf("输入插入位置-列号:");
    				scanf("%d", &number);
    				printf("要插入的字符串:");
    				scanf("%s", str);
    				insert(str, linenum, number);
    				break;
    
    			case 3:   //退出插入
    				break;
    			}
    			break;
    		case 2:			//执行删除功能
    			choice = menu_select_delete();  // 删除子菜单
    			switch (choice)
    			{
    			case 1:   //删除指定行
    				printf("\t行号:");
    				scanf("%d", &linenum);
    				break;
    			case 2:   //删除指定的字符串
    				printf("要删除的字符串:");
    				scanf("%s", str);
    				number = findstr(str);
    				if (number == NOT_FOUND)
    					printf("没有找到");
    				else
    					deletestr(lnum, number, strlen(str));
    				break;
    			case 3: 	//退出删除
    				break;
    			}
    			break;
    		case 3:  	//执行显示功能
    			choice = menu_select_print(); //显示子菜单
    			switch (choice) 	//显示指定行
    			{
    			case 1:
    				printf("\t行号:");
    				scanf("%d", &linenum);
    				printline(linenum);
    				break;
    			case 2:		//显示全部
    				list();
    				break;
    			case 3:		//退出显示
    				break;
    			}
    			break;
    		case 4:			//执行查找功能
    			printf("输入想要查找的字符串:");
    			scanf("%s", str);
    			number = findstr(str);
    			if (number == NOT_FOUND)
    				printf("没有找到");
    			else
    				printf("要查找的字符串所在行号:%d,列号:%d\n", lnum, number + 1);
    			break;
    		case 5:		//执行替换功能
    			printf("输入被替换的字符串:");
    			scanf("%s", str);
    			number = findstr(str);
    			if (number == NOT_FOUND)
    				printf("没有找到");
    			else
    			{
    				deletestr(lnum, number, strlen(str));
    				printf("要替换的字符串:");
    				scanf("%s", str);
    				insert(str, lnum, number + 1);
    			}
    			break;
    
    		case 6:     //执行移动功能
    			choice = menu_select_move();   //移动子菜单
    			switch (choice)
    			{
    			case 1:   // 向下移动一行
    				printf("输人要移动的字符串所在行号:");
    				scanf("%d", &linenum);
    				enter_empty(linenum);
    				break;
    			case 2:   //向上移动一行
    				printf("输入要移动的字符串所在行号:");
    				scanf("%d", &linenum);
    				delete_text(linenum - 1);
    				break;
    			case 3:   //向右移动一列
    				printf("输人要移动的字符串所在行号:");
    				scanf("%d", &linenum);
    				printf("输入要移动的字符串所在列号:");
    				scanf("%d", &number);
    				str[0] = ' ';
    				str[1] = '\0';
    				insert(str, linenum, number);
    				break;
    			case 4:   //向左移动
    				printf("输入要移动的字符串所在行号:");
    				scanf("%d", &linenum);
    				printf("输入要移动的字符串所在列号:");
    				scanf("%d", &number);
    				if (number <= 0)
    					printf("该列不存在");
    				else
    					deletestr(linenum, number - 2, 1);
    				break;
    			case 5:   //退出移动
    				break;
    			}
    			break;
    		case 7:		//执行存盘功能
    			save();
    			break;
    		case 8:		//执行读入文件功能
    			load();
    			break;
    		case 9:		//执行退出功能
    			exit(0);
    			break;
    		}
    	} while (1);
    	return 0;
    }
    //下列函数是主菜单功能的提示界面,其功能是说明主菜单中选项
    int menu_select()
    {
    	int c;
    	printf("\n\t\t1.插入\n");
    	printf("\t\t2.删除\n");
    	printf("\t\t3.显示\n");
    	printf("\t\t4.查找\n");
    	printf("\t\t5.替换\n");
    	printf("\t\t6.移动\n");
    	printf("\t\t7.文件存盘\n");
    	printf("\t\t8.装入文件\n");
    	printf("\t\t9.退出\n");
    	do
    	{
    		printf("\n\n\t\t请按数字选择:");
    		scanf("%d", &c);
    	} while (!(c >= 1 && c <= 9));
    	return(c);
    }
    
    //下列函数是插入子菜单功能的提示界面,其功能是说明在插入菜单下选项的含义。
    int menu_select_insert()
    {
    	int c;
    	printf("\n\t\t1.插入一行文字\n");
    	printf("\t\t2.插入一段文字\n");
    	printf("\t\t3.返回上级菜单\n");
    	do{
    		printf("\n\n\t\t请按数字选择:");
    		scanf("%d", &c);
    	} while (!(c >= 1 && c <= 3));
    	return(c);
    }
    //下列函数是删除子菜单功能的提示界面,其功能是说明在删除子菜单下选项的含义。
    int menu_select_delete()
    {
    	int c;
    	printf("\n\t\t1.删除一行文字\n");
    	printf("\t\t2.删除一段文字\n");
    	printf("\t\t3.返回上级菜单\n");
    	do{
    		printf("\n\n\t\t请按数字选择:");
    		scanf("%d", &c);
    	} while (!(c >= 1 && c <= 3));
    	return(c);
    }
    //下列函数是显示子菜单功能的提示界面,其功能是说明在显示子菜单下选项的含义
    int menu_select_print()
    {
    	int c;
    	printf("\n\t\t1.显示一行\n");
    	printf("\t\t2.全部显示\n");
    	printf("\t\t3.返回上级菜单\n");
    	do{
    		printf("\n\n\t\t请按数字选择:");
    		scanf("%d", &c);
    	}while(!(c >= 1 && c <= 3));
    	return(c);
    }
    //下列函数是移动子菜单功能的提示界面,其功能是说明在移动子菜单下选项的含义
    int menu_select_move()
    {
    	int c;
    	printf("\n\t\t1.向下移动一行\n");
    	printf("\t\t2.向上移动一行\n");
    	printf("\t\t3.向右移动一列\n");
    	printf("\t\t4.向左移动一列\n");
    	printf("\t\t5.返回上级菜单\n");
    	do{
    		printf("\n\n\t\t请按数字选择:");
    		scanf("%d", &c);
    	} while (!(c >= 1 && c <= 5));
    	return(c);
    }
    //下列函数的功能是在指定的行号 linenum处插入一行文字。
    void enter(int linenum)
    {
    	struct line * info, * q, * p;
    	p = start;
    	q = NULL;
    	while (p && p->num != linenum) //找到插入行
    	{
    		q = p;
    		p = p->next;
    	}
    	if (p == NULL && (q->num + 1) != linenum)	//指定行不存在,不能插入
    	{
    		printf("输入的行号不存在");
    	}
    	else // 指定行存在,进行插入
    	{
    		info = (struct line *)malloc(sizeof(struct line));
    		printf("输入要输入的字符串");
    		scanf("%s", info->text);
    		info->num = linenum;
    		if (linenum == 1)  //插入在第一行
    		{
    			info->next = p;
    			p->prior = info;
    			info->prior = NULL;
    			start = info;
    		}
    		else if (q->num != linenum)  //插入在最后一行
    		{
    			q->next = info;
    			info->next = p;
    			info->prior = q;
    		}
    		else     //插入在其他行
    		{
    			q->next = info;
    			info->next = p;
    			p->prior = info;
    			info->prior = q;
    		}
    		while (p)   //如果不是插入在最后一行,插入行后面的行号都加1
    		{
    			p->num = p->num + 1;
    			p = p->next;
    		}
    	}
    }
    
    //下列函数是为其他功能提供的一个辅助函数,它的功能是当文本内容插在文件中间时
    //其下面的内容的行号必须增加1,而删除时,被删除的文本后面的行号必减1.
    void patchup(int n, int incr)
    {
    	struct line *i;
    	i = find(n);
    	i = i->next;
    	while (i)
    	{
    		i->num = i->num + incr;
    		i = i->next;
    	}
    }
    //下列函数的功能是在指定行处插入一个空白行。
    void enter_empty(int linenum)
    {
    	struct line *info, *p;
    	info = (struct line *)malloc(sizeof(struct line));
    	if (!info)
    	{
    		printf("\t!内存不够!\n");
    		exit(0);
    	}
    	info->text[0] = ' ';
    	info->text[1] = '\0';
    	info->num = linenum;
    	if (find(linenum))    //如果要插人的行号存在,则进行插入
    	{
    		p = start;
    		if (linenum == 1)    //插入在首行
    		{
    			info->next = p;
    			start = info;
    			info->prior = NULL;
    			p->prior = info;
    		}
    		else  //插入在其他行
    		{
    			while (p->next->num != linenum)
    				p = p->next;
    			info->next = p->next;
    			p->next->prior = info;
    			p->next = info;
    			info->prior = p;
    		}
    		patchup(linenum, 1);
    	}
    	else
    		printf("该行不存在");
    }
    
    //下列函数的功能是插入文字到一行的中间。要是插入位置和现有位置中间有间隔,会补全空格
    void insert(char str[], int linenum, int position)
    {
    	struct line * info;
    	int len, i;
    	int lenth;
    	char rest_str[MAX_LEN], nostr[2] = { " " };
    	info = start;
    	while (info && info->num != linenum)   //查询要插入的行
    	{
    		info = info->next;
    	}
    	if (info == NULL)
    		printf("不存在该行!\n");
    	else if (position < 0)
    		printf("不存在该列!\n");
    	else    //如果行和列都存在,则进行插入
    	{
    		lenth = strlen(info->text);
    		if (lenth < position)	//插入列大于本行文件列数
    		{
    			len = position - lenth - 1;
    			for (i = 0; i < len; i++)
    				strcat(info->text, nostr);   //将空余的部分插入空格符
    			strcat(info->text, str);    //插入字符到列的未尾
    		}
    		else   //插入列在本行文字的中间
    		{
    			strcpy(rest_str, &info->text[position - 1]);
    			strcpy(&info->text[position - 1], str);
    			strcat(info->text, rest_str);
    		}
    	}
    }
    
    //下列函数的功能是删除指定行、指定位置、长度为 lenth的一段文字。
    void deletestr(int linenum, int position, int lenth)
    {
    	struct line * info;
    	char rest_str[MAX_LEN];
    	info = find(linenum);
    	if (info == NULL)
    		printf("该行没有字符!n");
    	else
    	{
    		if (strlen(info->text) <= (position + lenth))  //本行的字符长度<=待删除的列号+删除长度,直接在当前位置插入'\0'
    			info->text[position] = '\0';
    		else
    		{
    			strcpy(rest_str, &info->text[position + lenth]);
    			strcpy(&info->text[position], rest_str);
    		}
    	}
    }
    //下列函数的功能是删除指定行号 lineup的文字。
    void delete_text(int linenum)
    {
    	struct line * info, *p;
    	info = start;
    	while ((info->num < linenum) && info)
    		info = info->next;
    	if (info->next == NULL)
    		printf("该行不存在");
    	else
    	{
    		p = info->next;
    		if (start == info) //如果删除的是第一行
    		{
    			start = info->next;
    			if (start)  //如果删除后,不为空
    				start->prior = NULL;
    			else  //删除后为空
    				last = NULL;
    		}
    		else
    		{
    			info->prior->next = info->next;  //指定行的上一行指向指定行的下一行
    			if (info != last) //如果不是最后一行
    				info->next->prior = info->prior;  //修改其下一行的指向头的指针 
    			else  //如果是最后一行,修改尾指针
    				last = info->prior;
    		}
    		free(info);
    		while (p)
    		{
    			p->num = p->num - 1;
    			p = p->next;
    		}
    	}
    }
    //下列函数的功能是查找一段文字。
    int findstr(char * to_find)
    {
    	struct line * info;
    	int i = 0, find_len, found = 0, position;
    	char substring[MAX_LEN];
    	info = start;
    	lnum = 0;  //匹配到的行号
    	find_len = strlen(to_find);
    	while (info && !found)   //查询
    	{
    		i = 0;  //行间循环
    		while (!found && (i <= strlen(info->text) - find_len))  //行内查找循环
    		{
    			strcpy(substring, &info->text[i], find_len);
    			substring[find_len] = '\0';
    			if (strcmp(substring, to_find) == 0)
    			{
    				found = 1;
    				lnum = info->num;
    			}
    			else
    				++i;
    		}
    		info = info->next;
    	}
    	if (found)  //查找成功
    		position = i;
    	else   //查找不成功
    		position = NOT_FOUND;
    	return(position);
    }
    //下列函数的功能是查找指定行,如果查找成功返回结点所在的行指针。
    struct line * find(int linenum)
    {
    	struct line * info;
    	info = start;
    	while (info)
    	{
    		if (linenum != info->num)
    			info = info->next;
    		else
    			break;
    	}
    	return (info);
    }
    
    //下列函数的功能是显示指定行
    void printline(int linenum)
    {
    	struct line *info;
    	info = find(linenum);
    	if (info)
    		printf("%d:%s\n", info->num, info->text);
    	else
    		printf("该行不存在");
    }
    //下列函数的功能是显示线性表中的所有文本
    void list()
    {
    	struct line * info;
    	info = start;
    	while (info)
    	{
    		printf("%d:%s\n", info->num, info->text);
    		info = info->next;
    	}
    	printf("\n\n");
    }
    //下列函数的功能是把线性表中的所有文字保存到文件中
    void save()
    {
    	struct line	* info;
    	char * p;
    	FILE * fp;
    	if ((fp = fopen("D:\\text.txt", "w")) == NULL){
    		printf("\t文件打不开!n");
    		exit(0);
    	}
    	printf("\t正在存入文件!\n");
    	info = start;
    	while (info)
    	{
    		p = info->text;
    		while (*p)
    			putc(*p++, fp);
    		putc('\n', fp);
    		info = info->next;
    	}
    	fclose(fp);
    }
    //下列函数的功能是把文本文件中的内容读入到线性表中。
    void load()
    {
    	struct line *info, *temp;  //info指向当前行,temp指向info的前驱行
    	char c;
    	FILE *fp;  //文件指针
    	int inct, i;  //行计数器
    	temp = NULL;
    	if ((fp = fopen("D:\\text.txt", "r")) == NULL)
    	{
    		printf("\t文件打不开!\n");
    		exit(0);
    	}
    	printf("\n\t正装入文件!\n");
    	start = (struct line*)malloc(sizeof(struct line)); //动态生成一行的结点空间
    	info = start;
    	inct = 1;
    	while ((c = fgetc(fp)) != EOF)
    	{
    		i = 0;
    		info->text[i] = c;
    		i++;
    		while ((c = fgetc(fp)) != '\n')  //从文件中读取一行字符到线性表中,文件中每一行以\n为结束标
    		{
    			info->text[i] = c;
    			i++;
    		}
    		info->text[i] = '\0';  //线性表中每行末尾的结束标志
    		info->num = inct++;  //行号和计数器都加1
    		info->next = (struct line*)malloc(sizeof(struct line));
    		if (!info->next)
    		{
    			printf("\n\t内存已经用完!");
    			exit(0);
    		}
    		info->prior = temp;
    		temp = info;
    		info = info->next;
    	}
    	temp->next = NULL;
    	last = temp;
    	free(info);
    	start->prior = NULL;
    	fclose(fp);
    }
    

     

    展开全文
  • 轻松文本easypad2001

    2006-03-16 00:00:00
    ★具有英文拼写检查功能和强大的查找替换功能,支持对单词、句子、整行或整段文字的快速选定以及光标的快速定位,光标前后内容的快速选定,快速高亮显示指定文本,中英文字数统计、字符出现次数统计,迅速查找文件...
  • linux之sed命令

    2020-08-21 19:47:52
    linux文本三剑客--sed定义语法选项编辑命令作用文本查找文本修改(整行)文本替换(指定内容)文本添加例子grep 定义 是一种支持正则表达式的非交互式流编辑器 sed中的两个空间:pattern space和hold space。两者都在...

    定义

    是一种支持正则表达式的非交互式流编辑器

    工作原理

    缓冲区

    sed中的两个空间:pattern space和hold space。
    两者都在保存在内存中。

    pattern space是模式空间:
    用来进行模式匹配,相当于一个加工车间,其作用是根据模式去处理数据,处理完成之后会向屏幕或者是文件输出。处理完一行数据之后,第二行数据进入pattern空间的时候就会清空模式空间里面原来一行的内容,模式空间里面的数据不会长期保留。

    hold space是保留空间:
    是临时存放数据的地方。一般不常用到。不会自动清除,也不会主动将其中的内容输出,必须通过pattern space空间才能将其中的内容输出

    pattern space和hold space空间的互相转换:
    在这里插入图片描述
    sed的一般工作模式,pattern space每次从待处理的数据中取出一行数据,放入到pattern space中,然后进行处理,如果不做别的操作,该行语句还存放在pattern space空间中,直到pattern sapce空间读入第二行数据,从而就取代了原来的第一行数据。

    hold space是另一个缓冲区,只能和pattern space空间进行数据的交互,不能和终端进行交互,若想对hold space空间的数据进行输出,则必须要将其放在pattern space空间。

    命令:

    h/H:将数据从pattern space以覆盖/追加的方式到hold space空间
    g/G:将数据从hold space以覆盖/追加的方式到pattern space空间
    x:将hold space空间的内容和pattern space空间的数据互换
    n:读取下一行待处理数据内容,替换当前pattern space空间的内容,该选项下,模式空间始终只有1行
    N:读入下一行待处理数据内容,追加到pattern sapce空间的后面,该选项下,模式空间会有多行。

    语法

    常用语法1:

    sed [选项] sed编辑命令 输入文件

    常用语法2:

    shell 命令 | sed [选项] sed编辑命令

    常用选项

    1. -n:只显示匹配的行
    [root@localhost check]# sed -n '/root/p' /etc/passwd
    

    在这里插入图片描述
    2. -i:直接在文件里面修改,并且不会在屏幕输出
    3. -r(regexp)/-E:支持扩展正则表达式
    4. -f:从脚本文件中读取内容并执行
    5. -e:执行多个编辑命令。

    编辑命令

    p:打印匹配行,print
    d:删除指定行,delete
    a:在匹配行后面追加,append
    i:在匹配行前面插入,insert
    c:整行替换
    r:读入文件内容
    w:导出文本内容
    s:substitute,替换匹配的内容

    作用

    其工作方式可以基于行号,也可以基于模式查询。

    文本查找

    基于行号查找

    1.显示文本的第10行和最后一行的内容
    在这里插入图片描述

    
    [root@localhost check]# sed  -n '3,5p' /etc/passwd  ###显示3-5行内容
    [root@localhost check]# sed  -n '3,+5p' /etc/passwd   ##显示第3行及之后的5行内容
    [root@localhost check]# sed  -n '3,$!p' /etc/passwd   ##显示1-2行
    [root@localhost check]# sed  -n '14,$p' /etc/passwd  ##显示14行开始,一直到最后一行的内容
    [root@localhost check]# cat -n /etc/passwd |sed  -n '2~2p'    #取偶数行的内容,~后面的是步长
    

    基于模式查找

    [root@localhost ~]# sed -n '/bash/p' /etc/passwd    ##查找含有bash的行
    [root@localhost etc]# sed -n '/^$\|^#/!p'  /etc/grub2.cfg  ##匹配不是以#开头,且不是空行的内容
    [root@localhost check]# cat -n /etc/passwd|sed -n -r  "/.*feng.*bash.*/p"    ##查找/etc/passwd中既包含feng又包含bash的内容
    

    在这里插入图片描述

    文本修改(整行)

    文本修改整行:在这里插入图片描述

    文本替换(指定内容)

    文本替换某个内容:
    在这里插入图片描述

    文本添加

    文本增加
    在h.txt文件中的第1行后追加huagnxinyi 123的内容

    [root@localhost ~]# cat h.txt |sed -i '1a huangxinyi 123' h.txt 
    [root@localhost ~]# cat h.txt |sed -i '/huangxinyi 123/a guozhiyue' h.txt 
    

    引用shell的外部变量

    用双引号:

    [root@localhost check]# a=5
    [root@localhost check]# b=10
    [root@localhost check]# cat -n /etc/passwd|sed -n "${a},${b}p" 
    

    在这里插入图片描述

    “&”符号

    &符号代表前面查找的内容

    [root@localhost lianxi]# echo "i have a fat cat"|sed 's/.at/"&"/g'
    

    在这里插入图片描述

    标签使用

    用圆括号定义替换模式中的部分字符,每条指令最多使用9个标签
    在这里插入图片描述

    例子

    复制/etc/host文件到当前目录下,并在每行前面加一个字符串sanchuang

    [root@localhost lianxi]# sed -i '/^/ s//sanchuang/g ' hosts
    

    在这里插入图片描述

    2.自己编辑一个文件test.txt,内容如下:
    0.0.0.0
    1.1.1.1
    2.2.2.2
    输出以下形式:
    0.0.0.0:80,1.1.1.1:80,2.2.2.2:80
    在这里插入图片描述
    3.将文件倒序输出
    [root@localhost lianxi]# sed ‘1!G;h;$!d’ a.txt
    a.txt中的内容:
    first
    second
    third
    在这里插入图片描述

    sed高级用法

    展开全文
  • 4.vim底行模式的操作:查找替换整行替换,选择替换),多文件的操作 编译器-gcc 1.gcc编译器的特点?(交叉编译器的作用、交叉编译的作用) 2.编译选项:-E,-S,-c,-o; 3.头文件-l,警告信息:-w,-...

    嵌入式操作系统开发工具—Linux
    文本编辑器-vim

    1.vim的三种模式;
    2.如何配置vim?配置文件存在的路径?
    3.vim命令行模式的操作:复制,粘贴,删除,恢复
    4.vim底行模式的操作:查找,替换(整行替换,选择替换),多文件的操作
    编译器-gcc
    1.gcc编译器的特点?(交叉编译器的作用、交叉编译的作用)
    2.编译选项:-E,-S,-c,-o;
    3.头文件-l,警告信息:-w,-Wall,编译器优化-O123
    4.链接库文件:-l
    5.库文件的特点?Linux库文件的分类?Linux库存放的路径?静态库和动态库的制作与使用,区别?
    调试器-gdb
    1.gdb调试器的三个基本功能?
    2.gdb的使用:-g gdb可执行文件–tui
    3.gdb命令:
    运行命令:run、continue、finish
    断点命令:break、delete、clear、enable/disable、info、break
    单步执行:next、step(区别)
    查看变量的值:print、display
    图形化操作的命令:layout stc、layout asm、layout splite
    程序监控的命令: watch
    工程管理器:make
    1.工程管理器的特点:自动化编译(自动化体现在什么地方)
    2.Makefile文件的作用
    3.Makefile文件的三要素:目标,依赖,命令
    4.Makefile语法规则有哪些?
    5.为什么先将.c文件编译生成.o文件?
    6.工程化管理代码的优点有哪些?如何建立工程化目录?
    7.Makefile中重要的函数作用?
    嵌入式操作系统-shell编程
    1.shell的作用及种类
    2.Shell编程的语法:变量(字符串拼接),基本控制语句(if,for,while,until,case),函数(定义、调用,函数返回值,函数传参)shell数组
    文本处理的三剑客:grep,awk,sed,find
    1.命令选项
    2.正则表达式
    3.实例

    展开全文
  • Linux sed

    2018-12-19 12:02:48
    sed 按行处理文本文件  行限定符,正则表达式[a-z0-9] a /d /s p 添加一行,删除一行,查找符合条件的行进行替换个别字符,-i 直接修改文件 https://www.cnblogs.com/wangqiguo/p/6718512.html   阅读目录 ...
  • vim_命令手册

    2011-10-30 11:20:20
    /text 在文件中向前查找text ?text 在文件中向后查找text n 在同一方向重复查找 N 在相反方向重复查找 ftext 在当前行向前查找text Ftext 在当前行向后查找text ttext 在当前行向前查找text,并将光标定位在text的第...
  • IDEA配置 及 快捷键

    2018-12-14 17:16:00
    快捷键: 格式化代码 Ctrl+alt+L 后退Ctrl+alt+ <- 格式化代码快捷键:Ctrl + Alt + L 删除整行:Ctrl+X ...实现类 ctrl + alt ...Ctrl+N 查找类 ...Ctrl+Shift+N 查找文件 ...Ctrl+R 替换文本 shif...
  • vim常用命令

    2020-10-08 22:41:15
    查找:./字符串中(从光标下行开始找) ?字符串(从光标上行开始找) #:移动光标到字符串上,查找 文本模式下的操作: a:光标坐在位置的后边插入, ...整个文件第一个字符串替换:%s/原始字符串/替换的字符串
  • IDEA配置及快捷键

    2020-12-23 12:02:36
    快捷键: 格式化代码 Ctrl+alt+L 后退Ctrl+alt+ <- 格式化代码快捷键:Ctrl + Alt + L ...Ctrl+R 替换文本 shift + shift全局搜索 alt+enter 提示错误解决方案 ctrl+F12 查找当前类中的变量和方法 Alt
  • vim启动编辑器+目标文件 三种模式: 命令模式:默认进入命令模式 i 光标前插入 o 插入新行 dd 删除整行 u 撤销上一个操作 yy复制当前行 n yy 复制n行 p 粘贴 r 替换当前字符 / 查找关键字 插入模式:i键...
  • vim 操作大全

    2016-11-09 21:25:28
    文件头、尾,向上翻页、向下翻页,查找替换文件行号显示 1.删除文本 x:删除游标所在字符 X:删除游标所在前一个字符 dd:删除整行 dw:删除一个单词 d$或D:删除至行尾 d^:删除至行首 dG:删除到...
  • Sublime Text3_64.rar

    2020-02-19 15:53:53
    在Where框中指定需要查找文件范围,或填写表示查找目前打开的文件。 在Replace框中输入要替换成的代码,按Replace按钮批量替换。 6.文件爬虫 按Command + R可以列出文档中所有的CSS选择器。可以选择并...
  • 正则表达式经典实例.pdf

    热门讨论 2013-01-26 15:14:37
    3.16 使用代码中生成的替代文本替换匹配 3.17 替换另一个正则式匹配中的所有匹配 3.18 替换另一个正则式匹配之间的所有匹配 3.19 拆分字符串 3.20 拆分字符串,保留正则匹配 3.21 逐行查找 第4章 合法性验证和格式...
  • 正则表达式经典实例

    2014-07-11 14:39:05
    3.16 使用代码中生成的替代文本替换匹配 3.17 替换另一个正则式匹配中的所有匹配 3.18 替换另一个正则式匹配之间的所有匹配 3.19 拆分字符串 3.20 拆分字符串,保留正则匹配 3.21 逐行查找 第4章 合法性验证...
  • 4.5 在文件替换和删除文本 4.5.1 命令模式中的替换命令 4.5.2 在底线模式中的替换命令 4.5.3 底线模式中的删除方式 4.6 撤销和重复编辑命令 4.7 移动和复制文本 4.7.1 文本行的移动 4.7.2 在底线模式中的整行移动 ...
  • 实例169 快速查找替换文本中的字符 实例170 将金额格式化为包含6位小数的格式 实例171 将日期格式化为指定格式 实例172 判断月份最后一天 实例173 获得Windows系统已经运行的时间 实例174 获取当前日期与...
  • 实例169 快速查找替换文本中的字符 实例170 将金额格式化为包含6位小数的格式 实例171 将日期格式化为指定格式 实例172 判断月份最后一天 实例173 获得Windows系统已经运行的时间 实例174 获取当前日期与...
  • 33.如何使用“查找替换”对话框 34.如何显示操作系统默认的“关于”对话框 第2章 常用控件和组件 35.如何设置按钮控件的标签文本 36.如何设置按钮控件的显示字体 37.如何动态禁用和启用按钮控件 38.如何动态隐藏...
  • 如何使用“查找替换”对话框  34.如何显示操作系统默认的“关于”对话框  第2章常用控件和组件  35.如何设置按钮控件的标签文本  36.如何设置按钮控件的显示字体  37.如何动态禁用和启用按钮...
  • Excel百宝箱9.0无限制破解版

    热门讨论 2012-02-03 19:05:29
    【删除空白单元格所在行】:输入1则删除空白行(整行空白),输入2则删除空白单元格所在行 【筛选唯一值】:以选择区域左边一列为条件进行唯一值筛选,输入1则删除重复值所在行,输入2则隐藏重复值所在行 【相同项与...
  • Excel百宝箱

    2012-10-27 17:09:21
    【删除空白单元格所在行】:输入1则删除空白行(整行空白),输入2则删除空白单元格所在行 【筛选唯一值】:以选择区域左边一列为条件进行唯一值筛选,输入1则删除重复值所在行,输入2则隐藏重复值所在行 【相同项与...
  • VBA常用技巧

    2014-12-21 16:39:28
    技巧171 将数据写入文本文件 12 171-1 使用Print # 语句 12 171-2 另存为文本文件 12 技巧172 文件修改的日期和时间 12 技巧173 查找文件或文件夹 12 技巧174 获得当前文件夹的名称 12 技巧175 创建和删除文件夹 12 ...
  • 【删除空白单元格所在行】:输入1则删除空白行(整行空白),输入2则删除空白单元格所在行 【筛选唯一值】:以选择区域左边一列为条件进行唯一值筛选,输入1则删除重复值所在行,输入2则隐藏重复值所在行 【相同...
  • 【删除空白单元格所在行】:输入1则删除空白行(整行空白),输入2则删除空白单元格所在行 【筛选唯一值】:以选择区域左边一列为条件进行唯一值筛选,输入1则删除重复值所在行,输入2则隐藏重复值所在行 【相同项与...
  • VBA编程技巧大全

    2013-08-05 09:03:19
    技巧171 将数据写入文本文件 416 171-1 使用Print # 语句 416 171-2 另存为文本文件 418 技巧172 文件修改的日期和时间 419 技巧173 查找文件或文件夹 420 技巧174 获得当前文件夹的名称 422 技巧175 创建和删除...
  • 57 理解文本文件和文档文件 58 创建并使用源文件 59 创建并使用头文件 60 使用保护:避免头文件多次被包含 61 理解makefile 62 理解可执行文件 第六章 理解字符 63 理解字符:ASCII码字符 64 理解字符:转换ASCII码...
  • 57 理解文本文件和文档文件 58 创建并使用源文件 59 创建并使用头文件 60 使用保护:避免头文件多次被包含 61 理解makefile 62 理解可执行文件 第六章 理解字符 63 理解字符:ASCII码字符 64 理解字符:转换ASCII码...
  • 57 理解文本文件和文档文件 58 创建并使用源文件 59 创建并使用头文件 60 使用保护:避免头文件多次被包含 61 理解makefile 62 理解可执行文件 第六章 理解字符 63 理解字符:ASCII码字符 64 理解字符:转换ASCII码...
  • 57 理解文本文件和文档文件 58 创建并使用源文件 59 创建并使用头文件 60 使用保护:避免头文件多次被包含 61 理解makefile 62 理解可执行文件 第六章 理解字符 63 理解字符:ASCII码字符 64 理解字符:转换ASCII码...

空空如也

空空如也

1 2 3
收藏数 51
精华内容 20
关键字:

文本文件查找替换整行