批处理之家's Archiver

CrLf 发表于 2017-1-7 17:39

sed 4.3 单文件版

GNU Sed发布了最新版4.3,号称正则表达式提速10倍,并优化了非阻塞IO性能。
已编译为win32单文件版,请前往 BatchCN 下载:

[url]http://www.bathome.net/s/tool/?key=4.3/sed[/url]

happy886rr 发表于 2017-1-7 19:19

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=194947&ptid=42897]1#[/url] [i]CrLf[/i] [/b]

大师sed,用什么编译,每次我用msys都编译不过去。编译参数是什么

capslock 发表于 2017-1-7 23:59

我想起一件事, sed 维护者跑了

CrLf 发表于 2017-1-8 00:09

[i=s] 本帖最后由 CrLf 于 2017-1-8 00:14 编辑 [/i]

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=194957&ptid=42897]2#[/url] [i]happy886rr[/i] [/b]


msys 旧了,改用 msys2 吧,原生支持用 pacman 管理软件包

一开始我也编译不过去,知道发现 README-release 中提到用 ./bootstrap 检查依赖,才豁然开朗
参数没记下,应该是禁用了 nls 什么的才能去掉 iconv 依赖

CrLf 发表于 2017-1-8 00:10

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=194982&ptid=42897]3#[/url] [i]capslock[/i] [/b]


    换人了,时隔四年终于有人接手

CrLf 发表于 2017-1-8 17:39

本来嫌 gcc 自作主张把参数中的 *.txt 扩展成文件名导致由 --help.txt 引起的错误解析,所以去修改了一下 sed.c 。
不过改完后突然想到其实只要使用的时候都加上路径 .\*.txt 就可以避免,所以还是不把编译好的文件放上来了。
--------------------------------------------------------------------------------
记录一下修改步骤:
1、
在 main 之前加上:[code]#include <windows.h>
#include <dir.h>

char * CommandLineToArgvA(char * Commandline,int * argc){
    char *p,*q,*_Commandline[2048],**_argv;
    int len,inQuo;

    strcpy(_Commandline,Commandline);

    _argv = (char*)malloc(1024*sizeof(char));
    *argc=inQuo=0,q=p=_Commandline;
    while(1){
        if(!*p||(!inQuo&&(*p==' '||*p=='\t'))){
            len=p-q;
            _argv[*argc]=(char*)malloc((len+1)*sizeof(char));
           if(*q=='"' && *(p-1)=='"'){
               q++, len-=2;
           }
            memcpy(_argv[*argc],q,len);
            _argv[(*argc)++][len]='\0';

            for(++p;*p&&(*p==' '||*p=='\t');++p){}
            q=p;
        }
        if(*p=='"')inQuo=!inQuo;
        if(!*p++)break;
    }

    return _argv;
}

char * get_file_list(int * argv, int argc){
    WIN32_FIND_DATA FileInfo;
    int F_isDir; //标志判断
    long Handle;
    int i=0, len=0;
    char lpPath[2048]="";
    char *p;

    char **_argv =(char*)malloc(8*1024*1024);
    while(argc--){
        strcpy(lpPath, *argv);
        p = strrchr(lpPath,'\\')>strrchr(lpPath,'/') ? strrchr(lpPath,'\\') : strrchr(lpPath,'/') ;
        if(p){
            *(p+1) = '\0';
        } else {
            lpPath[0] = '\0';
        }

        if((Handle=FindFirstFile(*argv,&FileInfo))!=-1L){
            while(1){
                if(!strcmp(FileInfo.cFileName,".")||!strcmp(FileInfo.cFileName,".."))goto NextFile;
                if(FileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)goto NextFile;
                len = strlen(FileInfo.cFileName);
                _argv[i]=(char*)malloc((len+1)*sizeof(char));

                strcpy(_argv[i],lpPath);
                strcat(_argv[i],FileInfo.cFileName);
                i++;

NextFile:
                if(!FindNextFile(Handle,&FileInfo))break;
            }
        }
        argv++;
    }
    return _argv;
}[/code]--------------------------------------------------------------------------------
2、
在 main 的头部加上[code]    int _argc_=0;
    char **_argv_;
    _argv_=CommandLineToArgvA(GetCommandLineA(),&_argc_);
    argc = _argc_;

    int nn =0;
    for(nn=0; nn<argc; nn++){
        strcpy(argv[nn],_argv_[nn]);
    }[/code]--------------------------------------------------------------------------------
3、
再把[code] return_code = process_files(the_program, argv+optind);[/code]改为:[code] return_code = process_files(the_program, get_file_list(argv+optind, argc-optind));[/code]

yhcfsr 发表于 2018-8-31 15:00

亲测无问题

liuzhaoyzz 发表于 2019-5-25 22:51

[i=s] 本帖最后由 liuzhaoyzz 于 2019-5-27 10:48 编辑 [/i]

sed -i -e "/title\(.*\)/,+6d" c:\menu.lst
提示:cannot rename ./sedfkZ58z: Improper link
这是怎么回事?

netdzb 发表于 2020-3-22 20:10

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=220446&ptid=42897]8#[/url] [i]liuzhaoyzz[/i] [/b]

这个是sed,gnu的bug不知道有人修复吗?

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.