[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

sed -n "/str1/,/str2/p" file 到底是什么意思?(附例)

本帖最后由 踏沙行 于 2018-9-4 08:27 编辑

已知1.txt内容如下:
  1. 1:basktop at time to door
  2. 2:basktop at time to floor
  3. 3:bathome is webbbs
  4. 4:you can not do it
  5. 5:yes you need to watch the game
  6. 6:he is write for bat
  7. 7:he is write for bat
  8. 8:you can not do it
复制代码
命令:
sed -n /at/,/is/p 1.txt
或者 sed -n "/at/,/is/p" 1.txt
结果都如下:
  1. 1:basktop at time to door
  2. 2:basktop at time to floor
  3. 3:bathome is webbbs
  4. 5:yes you need to watch the game
  5. 6:he is write for bat1
  6. 7:he is write for bat2
  7. 8:you can not do it2
复制代码
请问,这个第8行为什么会被匹配?
附:使用环境 —— win7 64bit,sed版本:sed (GNU sed) 4.4,论坛第三方专区提供的版本(单行版)

本帖最后由 tigerpower 于 2018-12-2 13:56 编辑

回复 12# 踏沙行
  1. sed -n "/at/{:a;/at.*is/{p;q1};N;ba}" 1.txt && sed -n "/is/q1" 1.txt && sed -n "/at/p" 1.txt
复制代码
13楼的代码有bug,如果第一次匹配at的那一行又匹配is,则不会打印任何行。

TOP

好的,谢谢

TOP

回复 19# 踏沙行


    试试 Python 2.x
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 18# Batcher
下载了论坛提供的sedsed.zip,解压后和目标文档放在同一目录,操作结果如下:
  1. H:\>dir *.py
  2. 驱动器 H 中的卷没有标签。
  3. 卷的序列号是 893B-2135
  4. H:\ 的目录
  5. 2015-05-11,周一  16:00            52,851 sedsed.py
  6.                1 个文件         52,851 字节
  7.                0 个目录 262,617,034,752 可用字节
  8. H:\>
  9. H:\>type b.txt
  10. 1
  11. 2
  12. 3
  13. 4
  14. 5
  15. H:\>
  16. H:\>python sedsed.py -d --hide=hold "n;d" b.txt
  17.   File "sedsed.py", line 96
  18.     """
  19.       ^
  20. SyntaxError: invalid syntax
复制代码
不知道错在哪里了?

TOP

sedsed 源码也已经上传到帖子里面了
http://bbs.bathome.net/thread-15582-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 16# 踏沙行


    那个是 sedsed 的源代码,不只是案例介绍。你试试从这个网址复制下来 http://aurelio.net/projects/sedsed/
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 踏沙行 于 2018-9-10 11:09 编辑

回复 15# Batcher
sedsed调试一文所介绍的例子,来自于网页,但是网页挂了,不知道怎么调试了。

我自己的高度方案,结果不正确。
附:我自己的调试方案:
1、H:\a.txt内容为:
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
复制代码
2、从这里下载了sedsed1.0(http://aurelio.net/projects/sedsed/sedsed-1.0),将后缀改为.py,然后执行如下内容,结果出错
  1. H:\>python sedsed.py -d --hide=hold "n;d" b.txt
  2.   File "sedsed.py", line 96
  3.     """
  4.       ^
  5. SyntaxError: invalid syntax
复制代码
【注】我的python版本:Python 3.6.0;操作系统:win7 64位

TOP

回复 14# 踏沙行


N, n, H, h, G, g, x
搞清楚 pattern space 和 hold space 这两个概念才能理解这些命令的具体作用。

b label, t label, P, D
sed里面没有if, for这种分支和循环语句,但是可以通过上面这几个命令实现流程控制。

《O’Reilly sed &  awk 2nd Edition》里面有每个命令具体的讲解和实例
http://bbs.bathome.net/thread-13203-1-1.html

如果每个命令的作用都搞懂了,但就是看不懂一些复杂的命令组合是什么意思,可以使用 sedsed 来观察一下命令执行过程中 pattern space 和 hold space 的变化就明白了:
http://bbs.bathome.net/thread-15582-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 13# Batcher
谢谢,能讲讲a N ba指令是什么意思吗?
网上对N的介绍看不明白,另外,没有看到a b这两个指令的使用说明

TOP

回复 12# 踏沙行


这两个条件需要分别写成两个不同的命令?还是一条命令同时满足两个条件呢?
满足条件1的代码:
  1. sed -n "/at/{:a;N;/is/{/at.*\n.*is/p;q};ba}" 1.txt
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 11# Batcher
不好意思,我没有表达清楚:
1、打印,从包含"at"的行,到包含"is"的行,匹配一次即停止打印。若后面还有从“at”到“is"的,不再打印。
2、打印,若只有包含"at"的行,而无包括"is"的行,则只打印含at的行

TOP

回复 10# 踏沙行


    多了哪几行?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 9# Batcher
  1. H:\>sed -n "/at/{:a;N;/is/{/at.*\n.*is/p;d};ba}" 1.txt
  2. 1:basktop at time to door
  3. 2:basktop at time to floor
  4. 3:bathome is webbbs
  5. 5:yes you need to watch the game
  6. 6:he is write for bat
复制代码
結果好像还是多了几行啊

TOP

回复 8# 踏沙行
  1. sed -n "/at/{:a;N;/is/{/at.*\n.*is/p;d};ba}" 1.txt
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表