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

[原创教程] 一起来学习强大的sed(连载)

本人找到的功能较全的sed.exe 4.14 http://bbs.bathome.net/thread-1114-1-1.html
注:本人是sed新手,下面所叙述的也是本人的学习心得,还请大家补充和指正
有文本a.txt内容如下:
  1. a-1
  2. a-2
  3. a-3
  4. 1-a
  5. 2-a
  6. 3-a
  7. b-1
  8. b-2
  9. b-3
复制代码
1、显示所有含有字符"a"的行
  1. sed -n "/a/p" a.txt
复制代码
-n开关是表示输出由编辑指令控制,p开关是有条件显示开关,在些处就是仅显示有"a"字符的行。
2、显示所有以字符"a"开头的行
  1. sed -n "/^a/p" a.txt
复制代码
符号"^"在这里不是起到转义的作用而是表示行的开始,这个和findstr中的用法是一样的。
3、不显示所有含有"a"字符的行
  1. sed "/a/d" a.txt
复制代码
d开关是表示删除的意思。
4、不显示所有以"a"字符开头的行
  1. sed "/^a/d" a.txt
复制代码
5、将文本中所有的"b"字符替换为"bathome"
  1. sed "s/b/bathome/" a.txt
复制代码
s开关是替换开关,开启此开关后将会将第一个//间的字符替换为第二个//间的字符。
6、将文本中以"a"开头的行全部替换为"bathome"
  1. sed "s/^a.*/bathome/" a.txt
复制代码
7、不显示文本中前5行
  1. sed 1,5d a.txt
复制代码
即为删除文本前期前5行。
8、显示文本中5-8行
  1. sed -n 5,8p a.txt
复制代码
一样的要用-n开关先将输出定向到编辑指令控制。
9、将文本中所有"a"替换为"A",同时删除所有含有字符"-1"的行,并将所有以"b"开头的行替换为"bathome"
  1. sed -e "s/a/A/" -e "/-1/d" -e "s/^b.*/bathome/" a.txt
复制代码
-e开关是sed中多个命令的连接开关。
10、删除除了以"3"字符打头的行以外的所有行
  1. sed "/^3/!d" a.txt
复制代码
!开关是表示以什么样的条件不执行命令,在这里就是碰到以"3"字符打头的行不执行删除命令。

[ 本帖最后由 Batcher 于 2009-5-1 21:09 编辑 ]
8

评分人数

***共同提高***

回复 32# mycmd


    SED能读取EXE文件吗?
也许你可以试试ULTRAEDIT
QQ 33892006

TOP

我就想知道如何用 sed 替换一个 EXE文件中的十六进制代码,扒遍整个论坛,硬是找不到一篇有用的,sed -i "s/\x52\x61\x72\x21/\x52\x60\x72\x21/g" 1.exe 测试替换后的文件是坏的。

TOP

回复 30# taofan712


1、学的话一步一步学,先去学所以然,再来结合实例。不要仅仅执行实例看效果记实例。
2、有问题的话,不要在旧贴上一层一层盖楼,汇总一下过一段时间,【自己发帖】统一问,急得话群里问。
人生是一部书/只有这一页最温暖/读懂它的时候/我们在远方流泪...

TOP

回复 3# batman

再次阅读教程,有个关于感叹号的问题,希望能得到各位高手的解答。
感叹号!代表在除了某个条件,均执行某命令。
我看楼主两次前后两次使用百分号的位置不一样,自己没找到规律,也没测试出结果,望解答:
另,
1-a a-1 aa
2-a a-2 aa
3-a a-3 aa
4-a a-4 aa
5-a a-5 aa
(每行第一个和第三个a替换成b。能否用感叹号!做条件,类似:sed "s/a/b/!2" a.txt )

TOP

本帖最后由 taofan712 于 2017-3-6 11:59 编辑

拜读帖子后感觉修为快要突破元婴境了,原来sed也有简单的一面。
表达式加不加双引号的区别好像很大,但自己说不出个所以然。还需继续努力!

——————————
连载3里面,第23和24条,在sed中用n表示奇数行,用p表示偶数行。
显示文本奇数行 sed -n -e "p" -e "n" a.txt
显示文本偶数行 sed -n -e "n" -e "p" a.txt

我在这里有个疑问,-e是sed中多个命令的连接。那为什么以上两条命令最终结果不是显示所有的行(包括奇、偶行)?


————
这样显示奇偶行,感觉更容易理解:
sed -n "1~2p" a.txt
sed -n "2~2p" a.txt

TOP

很不错,学习了,谢谢!

TOP

管理员联系QQ多少呢

TOP

25# Hello123World
正是如此再加多练习。。。

ps:我的sed并不怎么样。。。
***共同提高***

TOP

本帖最后由 Hello123World 于 2011-6-22 16:22 编辑

看到连载2。
我想问一下楼主,你学sed命令是通过什么资料来学的,不会是通过sed自带的帮助吧——看的头疼,全英文。
看到连载3.(这得多重复看几遍,看完连载2,发现连载1忘得差不多了……)
看到连载4.

TOP

回复 20楼 的帖子

可以把sed的结果用管道传递个more,然后再重定向输出到文件。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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

TOP

sed有缺陷

不好意思,成功了。我输入错误。

[ 本帖最后由 wolfsnow 于 2010-4-14 11:07 编辑 ]

TOP

有点像shell中的sed的不知道有没有强大的awk啊

TOP

Batcher 大哥,嘿嘿. 因为电脑里程序太多, 还有java和ps等等工具安装很麻烦.咱还是老电脑
所以俺想到一个解决黑块的方法. 就是在用到sed输出的时候 在CMD上复制再粘到文本里,
哈哈!!!  真是灵机一动啊.

TOP

返回列表