sed 4.3 单文件版
GNU Sed发布了最新版4.3,号称正则表达式提速10倍,并优化了非阻塞IO性能。已编译为win32单文件版,请前往 BatchCN 下载:
[url]http://www.bathome.net/s/tool/?key=4.3/sed[/url] [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=194947&ptid=42897]1#[/url] [i]CrLf[/i] [/b]
大师sed,用什么编译,每次我用msys都编译不过去。编译参数是什么 我想起一件事, sed 维护者跑了 [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 依赖 [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=194982&ptid=42897]3#[/url] [i]capslock[/i] [/b]
换人了,时隔四年终于有人接手 本来嫌 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] 亲测无问题 [i=s] 本帖最后由 liuzhaoyzz 于 2019-5-27 10:48 编辑 [/i]
sed -i -e "/title\(.*\)/,+6d" c:\menu.lst
提示:cannot rename ./sedfkZ58z: Improper link
这是怎么回事? [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=220446&ptid=42897]8#[/url] [i]liuzhaoyzz[/i] [/b]
这个是sed,gnu的bug不知道有人修复吗?
页:
[1]