当前位置: 技术问答>linux和unix
linux文件内容拷贝的问题
来源: 互联网 发布时间:2017-02-28
本文导语: 请问: 在linux中,需要把文件出现abcd字符之前的部分拷贝到一个文件中,abcd及之后的内容拷贝到另外一个文件中,请问怎么用linux shell脚本或者linux C编程实现? 先谢谢啦~ | /***** 请问: 在linux中,...
请问:
在linux中,需要把文件出现abcd字符之前的部分拷贝到一个文件中,abcd及之后的内容拷贝到另外一个文件中,请问怎么用linux shell脚本或者linux C编程实现?
先谢谢啦~
在linux中,需要把文件出现abcd字符之前的部分拷贝到一个文件中,abcd及之后的内容拷贝到另外一个文件中,请问怎么用linux shell脚本或者linux C编程实现?
先谢谢啦~
|
/*****
请问:
在linux中,需要把文件出现abcd字符之前的部分拷贝到一个文件中,abcd及之后的内容拷贝到另外一个文件中,
请问怎么用linux shell脚本或者linux C编程实现?
*****/
#include
#include
#include
int main()
{
FILE *fp;
FILE *before;
FILE *after;
char *p = NULL;
int ch;
char *separate_str = "abcd";
int SIZE = strlen(separate_str);
char queue_str[SIZE+1];//用数组作为队列,用来缓存从文件中读出的字符
if ((fp = fopen("file.txt", "r")) == NULL)
{
printf("open file.txt error !");
exit(1);
}
if ((before = fopen("before.txt", "w")) == NULL)
{
printf("open before.txt error !");
exit(1);
}
if ((after = fopen("after.txt", "w")) == NULL)
{
printf("open after.txt error !");
exit(1);
}
fgets(queue_str, SIZE, fp);
while ((ch = fgetc(fp)) != EOF)
{
queue_str[SIZE - 1] = ch;
if (strcmp(queue_str, separate_str) != 0)
{
fputc(ch, before);
}
else
{
break;
}
p = &queue_str[1];
strcpy(queue_str, p);
}
fseek(before, -3, SEEK_END);
fputc('', before); //delete the last string "abc" in file before.txt
fputc('', before);
fputc('', before);
while ((ch = fgetc(fp)) != EOF)
{
fputc(ch, after);
}
fclose(fp);
fclose(before);
fclose(after);
return 0;
}
|
shell 基本上都是处理文本行的
|
新手写了一个,如有不对,请见谅并指教。
#include
#include
#include
#include
int main(void)
{
char str[50]="";
printf("please input the separative string, ex. "abcd"n");
scanf("%s",str);
int fd1=open("file.txt",O_RDONLY);
if(fd1==-1) perror("open file.txt failed"),exit(-1);
int fd2=open("befor.txt",O_RDWR|O_CREAT|O_TRUNC,0666);
if(fd2==-1) perror("create befor.txt failed"),exit(-1);
int fd3=open("after.txt",O_RDWR|O_CREAT|O_TRUNC,0666);
if(fd3==-1) perror("create after.txt failed"),exit(-1);
char first=' ';
int len=strlen(str);
char buff[len];
buff[len-1]='';
int readCount;
while((readCount=read(fd1,&first,1))!=0)
{
if(readCount==-1) printf("errorn"),exit(-2);
if(first==str[0]) {//先比较第一个字符是不是'a';
read(fd1,buff,len-1);
if(strcmp(buff,str+1)==0) {//如果第一个字符是'a',就接着比较'a'后面的字符串
off_t afterBeg=lseek(fd1,0,SEEK_CUR);//后半段的开始位置
off_t beforEnd=lseek(fd1,-len,SEEK_CUR);//前半段的结束位置
off_t beforBeg=lseek(fd1,0,SEEK_SET);
long beforSize=beforEnd-beforBeg;
int count=0;
int lastRead=beforSize%256;//每次读256个字节,最后一次读的大小
while(count