中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [己结]当sed遇到EnableDelayedExpansion
作者:
标题: [己结]当sed遇到EnableDelayedExpansion 上一主题 | 下一主题
SpikeKnox
初级用户




积分 116
发帖 28
注册 2007-1-3
状态 离线
『楼 主』:  [己结]当sed遇到EnableDelayedExpansion

在用sed 取一个网页中的IP地址时遇到问题:
请各位大侠帮忙看看,谢谢!

sed --text -e "/clip(/!d" -e "s/.*'\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}:[0-9]\{2,5\}\)'.*/\1/g" *.html>>List.txt

...

语句在批处理文件中成功执行了。可当我在批处理的开始处加了
@Echo OFF
SetLocal EnableDelayedExpansion
sed --text -e "/clip(/!d" -e "s/.*'\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}:[0-9]\{2,5\}\)'.*/\1/g" *.html>>List.txt

...

运行报错!
sed: -e expression #1, char 8: Unknown command: `['

请问是否是启用EnableDelayedExpansion后,‘[’的定义有所改变?

[ Last edited by SpikeKnox on 2007-1-26 at 01:02 AM ]

2007-1-26 00:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 2 楼』:  

用 sed 时遇到 SetLocal EnableDelayedExpansion 确实有点问题,建议遇到用sed的时候先SetLocal DISABLEDELAYEDEXPANSION

   此帖被 +1 点积分    点击查看详情   
评分人:【 SpikeKnox 分数: +1  时间:2007-1-26 01:59


2007-1-26 01:54
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
SpikeKnox
初级用户




积分 116
发帖 28
注册 2007-1-3
状态 离线
『第 3 楼』:  谢谢 vkill 的回复

是不是因为启用EnableDelayedExpansion后有的符号有了特殊含意,
以致‘[’符号的失效,就像‘!’

2007-1-26 01:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by SpikeKnox at 2007-1-26 01:59:
是不是因为启用EnableDelayedExpansion后有的符号有了特殊含意,
以致‘[’符号的失效,就像‘!’:o

我没有仔细去研究,我知道的是启用EnableDelayedExpansion后,sed 中用变量就出错了,不如说:

set a=1
sed "s/%a%/2/" a.txt

这样就出错了的

2007-1-26 02:03
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 5 楼』:  

你为什么把\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}:[0-9]\{2,5\}\) 加个 ' 那?我用的时候不加也可以的,后面加 g 也是多余

[ Last edited by vkill on 2007-1-26 at 02:06 AM ]

2007-1-26 02:04
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 6 楼』:  

貌似题目该叫 提取 代理地址吧?

2007-1-26 02:05
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
SpikeKnox
初级用户




积分 116
发帖 28
注册 2007-1-3
状态 离线
『第 7 楼』:  ^_^ vkill 好眼力

是的,是做提取代理地址用的,
那个/g 是好象多余,谢谢指正。

但不加前后的 ' 号,原页面中是这样的:
...clip('211.237.16.88:80')...
我不加' 取出来会变成 1.237.16.88:80
不信你试试*_^

[ Last edited by SpikeKnox on 2007-1-25 at 02:08 PM ]

2007-1-26 03:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
SpikeKnox
初级用户




积分 116
发帖 28
注册 2007-1-3
状态 离线
『第 8 楼』:  

C:\>echo clip('211.237.16.88:80') | sed -e "s/.*'\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}:[0-9]\{2,5\}\)'.*/\1/"
211.237.16.88:80

C:\>echo clip('211.237.16.88:80') | sed -e "s/.*\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}:[0-9]\{2,5\}\).*/\1/"
1.237.16.88:80

不过是什么原因我还没想通,知道的话也请指教.

2007-1-26 03:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 9 楼』:  

C:\>echo clip('211.237.16.88:80') | sed -e "s/[^0-9]*\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}:[0-9]\{2,5\}\).*/\1/"

2007-1-27 09:15
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
无奈何
荣誉版主





积分 1338
发帖 356
注册 2005-7-15
状态 离线
『第 10 楼』:  

用 sed 处理提取 IP 之类的事情稍微麻烦一点,如果考虑一行有多个 IP 的情况,必须用循环来处理。
更简单的方法是用 grep 来完成这个任务,可以使用 grep -o 参数,意思为只打印匹配内容,详情可以参看一下帮助。



  ☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

2007-1-28 14:00
查看资料  发送邮件  发短消息 网志  OICQ (105400208)  编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by 无奈何 at 2007-1-28 14:00:
用 sed 处理提取 IP 之类的事情稍微麻烦一点,如果考虑一行有多个 IP 的情况,必须用循环来处理。
更简单的方法是用 grep 来完成这个任务,可以使用 ...

恩,grep sed awk各有所长吧!虽然awk可以代替前两个

2007-1-29 09:20
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: