![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-03 06:27 |
共 48,038 主题排行 / 350,123 发帖 / 今日 1 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [己结]当sed遇到EnableDelayedExpansion |
| 可打印版本 739 / 10 |
| 第1楼 SpikeKnox | 发表于 2007-01-26 00:35 |
| 初级用户 发帖 28 积分 116 | |
|
[己结]当sed遇到EnableDelayedExpansion 在用sed 取一个网页中的IP地址时遇到问题:
请各位大侠帮忙看看,谢谢! sed --text -e "/clip(/!d" -e "s/.*'\(\{1,3\}\.\{1,3\}\.\{1,3\}\.\{1,3\}:\{2,5\}\)'.*/\1/g" *.html>>List.txt ... 语句在批处理文件中成功执行了。可当我在批处理的开始处加了 @Echo OFF SetLocal EnableDelayedExpansion sed --text -e "/clip(/!d" -e "s/.*'\(\{1,3\}\.\{1,3\}\.\{1,3\}\.\{1,3\}:\{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 ] |
|
| 第2楼 vkill | 发表于 2007-01-26 01:54 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
用 sed 时遇到 SetLocal EnableDelayedExpansion 确实有点问题,建议遇到用sed的时候先SetLocal DISABLEDELAYEDEXPANSION
|
|
| 第3楼 SpikeKnox | 发表于 2007-01-26 01:59 |
| 初级用户 发帖 28 积分 116 | |
|
谢谢 vkill 的回复 是不是因为启用EnableDelayedExpansion后有的符号有了特殊含意,
以致‘[’符号的失效,就像‘!’ ![]() |
|
| 第4楼 vkill | 发表于 2007-01-26 02:03 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
Originally posted by SpikeKnox at 2007-1-26 01:59: |
|
| 第5楼 vkill | 发表于 2007-01-26 02:04 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
你为什么把\(\{1,3\}\.\{1,3\}\.\{1,3\}\.\{1,3\}:\{2,5\}\) 加个 ' 那?我用的时候不加也可以的,后面加 g 也是多余
[ Last edited by vkill on 2007-1-26 at 02:06 AM ] |
|
| 第6楼 vkill | 发表于 2007-01-26 02:05 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
貌似题目该叫 提取 代理地址吧?
|
|
| 第7楼 SpikeKnox | 发表于 2007-01-26 03:01 |
| 初级用户 发帖 28 积分 116 | |
|
^_^ 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 ] |
|
| 第8楼 SpikeKnox | 发表于 2007-01-26 03:07 |
| 初级用户 发帖 28 积分 116 | |
|
C:\>echo clip('211.237.16.88:80') | sed -e "s/.*'\(\{1,3\}\.\{1,3\}\.\{1,3\}\.\{1,3\}:\{2,5\}\)'.*/\1/"
211.237.16.88:80 C:\>echo clip('211.237.16.88:80') | sed -e "s/.*\(\{1,3\}\.\{1,3\}\.\{1,3\}\.\{1,3\}:\{2,5\}\).*/\1/" 1.237.16.88:80 不过是什么原因我还没想通,知道的话也请指教. |
|
| 第9楼 vkill | 发表于 2007-01-27 09:15 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
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/"
|
|
| 第10楼 无奈何 | 发表于 2007-01-28 14:00 |
| 荣誉版主 发帖 356 积分 1,338 | |
|
用 sed 处理提取 IP 之类的事情稍微麻烦一点,如果考虑一行有多个 IP 的情况,必须用循环来处理。
更简单的方法是用 grep 来完成这个任务,可以使用 grep -o 参数,意思为只打印匹配内容,详情可以参看一下帮助。 |
|
| 第11楼 vkill | 发表于 2007-01-29 09:20 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
Originally posted by 无奈何 at 2007-1-28 14:00: 恩,grep sed awk各有所长吧!虽然awk可以代替前两个 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |