标题: [文本处理] sed 4.3 单文件版 [打印本页]
作者: CrLf 时间: 2017-1-7 17:39 标题: sed 4.3 单文件版
GNU Sed发布了最新版4.3,号称正则表达式提速10倍,并优化了非阻塞IO性能。
已编译为win32单文件版,请前往 BatchCN 下载:
http://www.bathome.net/s/tool/?key=4.3/sed
作者: happy886rr 时间: 2017-1-7 19:19
回复 1# CrLf
大师sed,用什么编译,每次我用msys都编译不过去。编译参数是什么
作者: capslock 时间: 2017-1-7 23:59
我想起一件事, sed 维护者跑了
作者: CrLf 时间: 2017-1-8 00:09
本帖最后由 CrLf 于 2017-1-8 00:14 编辑
回复 2# happy886rr
msys 旧了,改用 msys2 吧,原生支持用 pacman 管理软件包
一开始我也编译不过去,知道发现 README-release 中提到用 ./bootstrap 检查依赖,才豁然开朗
参数没记下,应该是禁用了 nls 什么的才能去掉 iconv 依赖
作者: CrLf 时间: 2017-1-8 00:10
回复 3# capslock
换人了,时隔四年终于有人接手
作者: CrLf 时间: 2017-1-8 17:39
本来嫌 gcc 自作主张把参数中的 *.txt 扩展成文件名导致由 --help.txt 引起的错误解析,所以去修改了一下 sed.c 。
不过改完后突然想到其实只要使用的时候都加上路径 .\*.txt 就可以避免,所以还是不把编译好的文件放上来了。
--------------------------------------------------------------------------------
记录一下修改步骤:
1、
在 main 之前加上:- #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;
- }
复制代码
--------------------------------------------------------------------------------
2、
在 main 的头部加上- 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]);
- }
复制代码
--------------------------------------------------------------------------------
3、
再把- return_code = process_files(the_program, argv+optind);
复制代码
改为:- return_code = process_files(the_program, get_file_list(argv+optind, argc-optind));
复制代码
作者: yhcfsr 时间: 2018-8-31 15:00
亲测无问题
作者: liuzhaoyzz 时间: 2019-5-25 22:51
本帖最后由 liuzhaoyzz 于 2019-5-27 10:48 编辑
sed -i -e "/title\(.*\)/,+6d" c:\menu.lst
提示:cannot rename ./sedfkZ58z: Improper link
这是怎么回事?
作者: netdzb 时间: 2020-3-22 20:10
回复 8# liuzhaoyzz
这个是sed,gnu的bug不知道有人修复吗?
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |