<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/podcast2.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.lazysa.com" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/lazysa" type="application/rss+xml"></fs:self_link><lastBuildDate>Wed, 12 Aug 2009 04:18:09 GMT</lastBuildDate><title>懒人运维</title><description>Linux自动化管理</description><image><url>http://www.feedsky.com/feed/lazysa/sc/gif</url><title>懒人运维</title><link>http://www.lazysa.com</link></image><link>http://www.lazysa.com</link><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><language>en</language><pubDate>Wed, 12 Aug 2009 04:18:09 GMT</pubDate><item><title>正则表达式-零宽断言详解</title><link>http://www.lazysa.com/2009/08/724.html</link><content:encoded>&lt;p&gt;零宽断言的意思是（匹配宽度为零，满足一定的条件/断言） 我也不知道这个词语是那个王八蛋发明的，简直是太拗口了。&lt;/p&gt;
&lt;p&gt;零宽断言用于查找在某些内容(但并不包括这些内容)之前或之后的东西，也就是说它们像\b,^,$那样用于指定一个位置，这个位置应该满足一定的条件(即断言)，因此它们也被称为零宽断言。&lt;/p&gt;
&lt;p&gt;断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。&lt;/p&gt;
&lt;p&gt;其中零宽断言又分四种&lt;/p&gt;
&lt;p&gt;先行断言   也叫零宽度正预测先行断言(?=表达式)          表示匹配表达式前面的位置&lt;/p&gt;
&lt;p&gt;例如 [a-z]*(?=ing) 可以匹配cooking singing 中的cook与sing&lt;/p&gt;
&lt;p&gt;注意：先行断言的执行步骤是这样的先从要匹配的字符串中的最右端找到第一个ing(也就是先行断言中的表达式)然后 再匹配其前面的表达式，若无法匹配则继续查找第二个ing 再匹配第二个 ing前面的字符串，若能匹配 则匹配&lt;/p&gt;
&lt;p&gt;例如：.*(?=ing) 可以匹配cooking singing 中的cooking sing 而不是 cook&lt;/p&gt;
&lt;p&gt;后发断言        也叫零宽度正回顾后发断言        (?&amp;lt;=表达式)   表示匹配表达式后面的位置&lt;/p&gt;
&lt;p&gt;例如(?&amp;lt;=abc).* 可以匹配abcdefg中的defg       &lt;/p&gt;
&lt;p&gt;注意：后发断言跟先行断言恰恰相反 它的执行步骤是这样的：先从要匹配的字符串中的最左端找到第一个abc(也就是先行断言中的表达式)然后 再匹配其后面的表达式，若无法匹配则继续查找第二个abc 再匹配第二个abc后面的字符串，若能匹配 则匹配&lt;/p&gt;
&lt;p&gt;例如(?&amp;lt;=abc).* 可以匹配abcdefgabc中的defgabc 而不是abcdefg&lt;/p&gt;
&lt;p&gt;负向零宽断言&lt;/p&gt;
&lt;p&gt;负向零宽断言 (?!表达式) 也是匹配一个零宽度的位置，不过这个位置的“断言”取表达式的反值，例如 (?!表达式) 表示 表达式 前面的位置，如果 表达式 不成立 ，匹配这个位置；如果 表达式 成立，则不匹配：同样，负向零宽断言也有“先行”和“后发”两种，负向零宽后发断言为 (?&amp;lt;!表达式)&lt;/p&gt;
&lt;p&gt;负向零宽后发断言(?&amp;lt;!表达式)&lt;/p&gt;
&lt;p&gt;负向零宽先行断言 (?!表达式)&lt;/p&gt;
&lt;p&gt;负向零宽断言要注意的跟正向的一样&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=7a6f82cc098bb5a17f0e9062a014cfc5&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=7a6f82cc098bb5a17f0e9062a014cfc5&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=3304907a9663693bfd53d2793baa9df5&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=3304907a9663693bfd53d2793baa9df5&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=8f74768b6dc945e96d9054ad747af38f&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=8f74768b6dc945e96d9054ad747af38f&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=5562d2589c8d507f65c28e9477712397&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=5562d2589c8d507f65c28e9477712397&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=c5dca3d4c7fe56b6697451051f580a2a&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=c5dca3d4c7fe56b6697451051f580a2a&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=3fad98b2ac748987afdd8d1ba73b13e6&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=3fad98b2ac748987afdd8d1ba73b13e6&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=6c02d053de974430de61549a10f7b590&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=6c02d053de974430de61549a10f7b590&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=ad06e99950ab548bf75f53d217e5bab9&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=ad06e99950ab548bf75f53d217e5bab9&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=db94d05aab7270c99584fe831bb64dc0&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=db94d05aab7270c99584fe831bb64dc0&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lazysa.com/2009/08/724.html/feed</wfw:commentRss><description>正则表达式-零宽断言详解&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=7a6f82cc098bb5a17f0e9062a014cfc5&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=7a6f82cc098bb5a17f0e9062a014cfc5&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=3304907a9663693bfd53d2793baa9df5&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=3304907a9663693bfd53d2793baa9df5&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=8f74768b6dc945e96d9054ad747af38f&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=8f74768b6dc945e96d9054ad747af38f&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=5562d2589c8d507f65c28e9477712397&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=5562d2589c8d507f65c28e9477712397&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=c5dca3d4c7fe56b6697451051f580a2a&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=c5dca3d4c7fe56b6697451051f580a2a&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=3fad98b2ac748987afdd8d1ba73b13e6&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=3fad98b2ac748987afdd8d1ba73b13e6&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=6c02d053de974430de61549a10f7b590&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=6c02d053de974430de61549a10f7b590&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=ad06e99950ab548bf75f53d217e5bab9&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=ad06e99950ab548bf75f53d217e5bab9&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=db94d05aab7270c99584fe831bb64dc0&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=db94d05aab7270c99584fe831bb64dc0&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>正则表达式</category><category>零宽断言</category><category>Perl</category><pubDate>Wed, 12 Aug 2009 12:18:09 +0800</pubDate><author>lazysa</author><comments>http://www.lazysa.com/2009/08/724.html#comments</comments><guid isPermaLink="false">http://www.lazysa.com/?p=724</guid><dc:creator>lazysa</dc:creator></item><item><title>常用工具正则表达式对比与区别</title><link>http://www.lazysa.com/2009/08/720.html</link><content:encoded>&lt;p&gt;在各种常用的工具中，&lt;br /&gt;
正则表达式如此的相似却又不同。&lt;br /&gt;
下表列出了一些常用的正则表达式，以及其不同之处。&lt;br /&gt;
项目总多，遗漏必有不少，请各位看官不吝指出。&lt;br /&gt;
以perl的正则为基准，不同的用法以粉红色标出。&lt;/p&gt;
&lt;table border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;&lt;strong&gt;grep 2.5.1&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;&lt;strong&gt;egrep 2.5.1&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;&lt;strong&gt;sed 3.02&lt;br /&gt;
sed 4.07&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;&lt;strong&gt;awk 3.1.1&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;&lt;strong&gt;perl 5.8.0&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;&lt;strong&gt;vim 6.1&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;&lt;strong&gt;JavaScript&lt;/strong&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;转义&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\&lt;/td&gt;
&lt;td&gt;\&lt;/td&gt;
&lt;td&gt;\&lt;/td&gt;
&lt;td&gt;\&lt;/td&gt;
&lt;td&gt;\&lt;/td&gt;
&lt;td&gt;\&lt;/td&gt;
&lt;td&gt;\&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;行头&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;^&lt;/td&gt;
&lt;td&gt;^&lt;/td&gt;
&lt;td&gt;^&lt;/td&gt;
&lt;td&gt;^&lt;/td&gt;
&lt;td&gt;^&lt;/td&gt;
&lt;td&gt;^&lt;/td&gt;
&lt;td&gt;^&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;行尾&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;$&lt;/td&gt;
&lt;td&gt;$&lt;/td&gt;
&lt;td&gt;$&lt;/td&gt;
&lt;td&gt;$&lt;/td&gt;
&lt;td&gt;$&lt;/td&gt;
&lt;td&gt;$&lt;/td&gt;
&lt;td&gt;$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;n个 {n} {m,n} {m,} {,n}&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\{n\}&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;{n}&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\{n\}&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;{n}或\{n\} 仅定义 &amp;#8211;posix 或 &amp;#8211;re-interval有效(要表达}和{,得用\\{和\\} 没有定义&amp;#8211;posix或&amp;#8211;re-interval时,不能用{n}的语法, \}\{和}{同义&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;{n}&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\{n\}&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;{n}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;{0,}&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;*或\*, (要表达*,得用\\*)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;{1,}&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\+&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\+&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;+或\+, (要表达+, 得用\\+)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\+&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;{0,1}&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\?&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\?&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;?或\?, (要表达?, 得用\\?)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\?&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;任意字符&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;.&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;.&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;.&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;. 含\n.&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. /s修饰后则含\n&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;. 除\n&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;. 除\n&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;(pat) 匹配并获结果&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\(pat\)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;(pat)&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\(pat\)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;(pat)或\(pat\) (要表达括号,用\\( \\) )&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;(pat)&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\(pat\)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;(pat)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;(?:pat) 匹配但不获结果&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;(?:pat)&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;(?:pat)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;(?=pat) 等于预查&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;(?=pat)&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;(?=pat)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;(?!pat) 不等预查&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;(?!pat)&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;(?!pat)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;| 或&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\|&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;|&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\|&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;|或\| (要表达|,得用\\|)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;|&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\|&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;|&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;其中任意字符&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;[xyz]&lt;/td&gt;
&lt;td&gt;[xyz]&lt;/td&gt;
&lt;td&gt;[xyz]&lt;/td&gt;
&lt;td&gt;[xyz]&lt;/td&gt;
&lt;td&gt;[xyz]&lt;/td&gt;
&lt;td&gt;[xyz]&lt;/td&gt;
&lt;td&gt;[xyz]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;[.ch.] [=ch=]&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;[.ch.]&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;单词边界 \b&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\b&lt;/td&gt;
&lt;td&gt;\b&lt;/td&gt;
&lt;td&gt;\b&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\b&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;非单词边界 \B&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\B&lt;/td&gt;
&lt;td&gt;\B&lt;/td&gt;
&lt;td&gt;\B&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\B&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;单词左右边界 &amp;lt;&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\&amp;lt; \&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\&amp;lt; \&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\&amp;lt; \&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持 (&amp;gt;&amp;lt;和\&amp;gt;\&amp;lt;和\\&amp;gt;\\&amp;lt;同义&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;不支持(&amp;gt;&amp;lt;和\&amp;gt;\&amp;lt;同义&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\&amp;lt; \&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;不支持(&amp;gt;&amp;lt;和\&amp;gt;\&amp;lt;同义&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;控制字符 /cx&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\cx&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\cx&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\cx&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;数字\d&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\d&lt;/td&gt;
&lt;td&gt;\d&lt;/td&gt;
&lt;td&gt;\d&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;非数字\D&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\D&lt;/td&gt;
&lt;td&gt;\D&lt;/td&gt;
&lt;td&gt;\D&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;换页 \f&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;高版本支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\f&lt;/td&gt;
&lt;td&gt;\f&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;另义 \f表示文件名字符&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\f&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;换行 \n&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\n&lt;/td&gt;
&lt;td&gt;\n&lt;/td&gt;
&lt;td&gt;\n&lt;/td&gt;
&lt;td&gt;\n&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;回车 \r&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\r&lt;/td&gt;
&lt;td&gt;\r&lt;/td&gt;
&lt;td&gt;\r&lt;/td&gt;
&lt;td&gt;\r&lt;/td&gt;
&lt;td&gt;\r&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;空白 \s&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\s&lt;/td&gt;
&lt;td&gt;\s&lt;/td&gt;
&lt;td&gt;\s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;非空白 \S&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\S&lt;/td&gt;
&lt;td&gt;\S&lt;/td&gt;
&lt;td&gt;\S&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;制表符 \t&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;高版本支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\t&lt;/td&gt;
&lt;td&gt;\t&lt;/td&gt;
&lt;td&gt;\t&lt;/td&gt;
&lt;td&gt;\t&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;垂直制表符 \v&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;高版本支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\v&lt;/td&gt;
&lt;td&gt;\v&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;另义 \v表示very magic&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\v&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;单词字符 \w [A-Za-z0-9_]&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\w&lt;/td&gt;
&lt;td&gt;\w&lt;/td&gt;
&lt;td&gt;\w&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\w&lt;/td&gt;
&lt;td&gt;\w&lt;/td&gt;
&lt;td&gt;\w&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;非单词字符 \W [^A-Za-z0-9]&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\W&lt;/td&gt;
&lt;td&gt;\W&lt;/td&gt;
&lt;td&gt;\W&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\W&lt;/td&gt;
&lt;td&gt;\W&lt;/td&gt;
&lt;td&gt;\W&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;\xn 16进制&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;高版本支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\xn&lt;/td&gt;
&lt;td&gt;\xn&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;另义 \x表示[0-9A-Za-z]&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\xn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;\n 八进制&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\n&lt;/td&gt;
&lt;td&gt;\n&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\n&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;\n 后向引用&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\n&lt;/td&gt;
&lt;td&gt;\n&lt;/td&gt;
&lt;td&gt;\n&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\n 仅取结果可用&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\n&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;\n 仅取结果可用&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;\n&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;[:alnum:] 字母和数字&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;[:alnum:]&lt;/td&gt;
&lt;td&gt;[:alnum:]&lt;/td&gt;
&lt;td&gt;[:alnum:]&lt;/td&gt;
&lt;td&gt;[:alnum:]&lt;/td&gt;
&lt;td&gt;[:alnum:]&lt;/td&gt;
&lt;td&gt;[:alnum:]&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;[:alpha:] 字母&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;[:alpha:]&lt;/td&gt;
&lt;td&gt;[:alpha:]&lt;/td&gt;
&lt;td&gt;[:alpha:]&lt;/td&gt;
&lt;td&gt;[:alpha:]&lt;/td&gt;
&lt;td&gt;[:alpha:]&lt;/td&gt;
&lt;td&gt;[:alpha:]&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;[:cntrl:] 控制字符&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;[:cntrl:]&lt;/td&gt;
&lt;td&gt;[:cntrl:]&lt;/td&gt;
&lt;td&gt;[:cntrl:]&lt;/td&gt;
&lt;td&gt;[:cntrl:]&lt;/td&gt;
&lt;td&gt;[:cntrl:]&lt;/td&gt;
&lt;td&gt;[:cntrl:]&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;[:digit:] 数字&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;[:digit:]&lt;/td&gt;
&lt;td&gt;[:digit:]&lt;/td&gt;
&lt;td&gt;[:digit:]&lt;/td&gt;
&lt;td&gt;[:digit:]&lt;/td&gt;
&lt;td&gt;[:digit:]&lt;/td&gt;
&lt;td&gt;[:digit:]&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;[:graph:] 可打印字符（不含空格）&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;[:graph:]&lt;/td&gt;
&lt;td&gt;[:graph:]&lt;/td&gt;
&lt;td&gt;[:graph:]&lt;/td&gt;
&lt;td&gt;[:graph:]&lt;/td&gt;
&lt;td&gt;[:graph:]&lt;/td&gt;
&lt;td&gt;[:graph:]&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;[:lower:] 小写&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;[:lower:]&lt;/td&gt;
&lt;td&gt;[:lower:]&lt;/td&gt;
&lt;td&gt;[:lower:]&lt;/td&gt;
&lt;td&gt;[:lower:]&lt;/td&gt;
&lt;td&gt;[:lower:]&lt;/td&gt;
&lt;td&gt;[:lower:]&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;[:print:] 可打印字符（含空格）&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;[:print:]&lt;/td&gt;
&lt;td&gt;[:print:]&lt;/td&gt;
&lt;td&gt;[:print:]&lt;/td&gt;
&lt;td&gt;[:print:]&lt;/td&gt;
&lt;td&gt;[:print:]&lt;/td&gt;
&lt;td&gt;[:print:]&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;[:punct:] 标点&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;[:punct:]&lt;/td&gt;
&lt;td&gt;[:punct:]&lt;/td&gt;
&lt;td&gt;[:punct:]&lt;/td&gt;
&lt;td&gt;[:punct:]&lt;/td&gt;
&lt;td&gt;[:punct:]&lt;/td&gt;
&lt;td&gt;[:punct:]&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;[:space:] 空格&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;[:space:]&lt;/td&gt;
&lt;td&gt;[:space:]&lt;/td&gt;
&lt;td&gt;[:space:]&lt;/td&gt;
&lt;td&gt;[:space:]&lt;/td&gt;
&lt;td&gt;[:space:]&lt;/td&gt;
&lt;td&gt;[:space:]&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;[:upper:] 大写字母&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;[:upper:]&lt;/td&gt;
&lt;td&gt;[:upper:]&lt;/td&gt;
&lt;td&gt;[:upper:]&lt;/td&gt;
&lt;td&gt;[:upper:]&lt;/td&gt;
&lt;td&gt;[:upper:]&lt;/td&gt;
&lt;td&gt;[:upper:]&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;[:xdigit:] 16进制数字&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;[:xdigit:]&lt;/td&gt;
&lt;td&gt;[:xdigit:]&lt;/td&gt;
&lt;td&gt;[:xdigit:]&lt;/td&gt;
&lt;td&gt;[:xdigit:]&lt;/td&gt;
&lt;td&gt;[:xdigit:]&lt;/td&gt;
&lt;td&gt;[:xdigit:]&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;不支持&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;[:return:]&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;[:return:]&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;[:tab:]&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;[:tab:]&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;[:escape:]&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;[:escape:]&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;[:backspace:]&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;[:backspace:]&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;不支持&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=460499e364b9cd06ff1cdbb225053687&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=460499e364b9cd06ff1cdbb225053687&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=20102b05e3c7a8f3f5db788e0e1adf0e&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=20102b05e3c7a8f3f5db788e0e1adf0e&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=99ac62d86c650739a4ff7b3d1bbb763a&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=99ac62d86c650739a4ff7b3d1bbb763a&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=aea989d54dfe78c0c2726f7006485da6&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=aea989d54dfe78c0c2726f7006485da6&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=1dad5ebe4331cf07bc141ff8dd578c5c&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=1dad5ebe4331cf07bc141ff8dd578c5c&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=7c7b865f6e2c67cee0e5719a3e0e12fc&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=7c7b865f6e2c67cee0e5719a3e0e12fc&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=77b32c28e8ba2dd0dcea2bf5c7d8b2ff&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=77b32c28e8ba2dd0dcea2bf5c7d8b2ff&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=91947a944fa2e002f656400e76646428&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=91947a944fa2e002f656400e76646428&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=39cc6fe083b4e9d9b698e3144333d306&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=39cc6fe083b4e9d9b698e3144333d306&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lazysa.com/2009/08/720.html/feed</wfw:commentRss><description>在各种常用的工具中，
正则表达式如此的相似却又不同。
下表列出了一些常用的正则表达式，以及其不同之处。
项目总多，遗漏必有不少，请各位看官不吝指出。
以perl的正则为基准，不同的用法以粉红色标出。&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=460499e364b9cd06ff1cdbb225053687&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=460499e364b9cd06ff1cdbb225053687&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=20102b05e3c7a8f3f5db788e0e1adf0e&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=20102b05e3c7a8f3f5db788e0e1adf0e&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=99ac62d86c650739a4ff7b3d1bbb763a&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=99ac62d86c650739a4ff7b3d1bbb763a&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=aea989d54dfe78c0c2726f7006485da6&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=aea989d54dfe78c0c2726f7006485da6&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=1dad5ebe4331cf07bc141ff8dd578c5c&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=1dad5ebe4331cf07bc141ff8dd578c5c&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=7c7b865f6e2c67cee0e5719a3e0e12fc&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=7c7b865f6e2c67cee0e5719a3e0e12fc&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=77b32c28e8ba2dd0dcea2bf5c7d8b2ff&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=77b32c28e8ba2dd0dcea2bf5c7d8b2ff&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=91947a944fa2e002f656400e76646428&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=91947a944fa2e002f656400e76646428&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=39cc6fe083b4e9d9b698e3144333d306&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=39cc6fe083b4e9d9b698e3144333d306&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>sed</category><category>Linux</category><category>正则表达式</category><category>awk</category><category>Perl</category><category>vim</category><category>JavaScript</category><category>grep</category><pubDate>Wed, 12 Aug 2009 11:43:59 +0800</pubDate><author>lazysa</author><comments>http://www.lazysa.com/2009/08/720.html#comments</comments><guid isPermaLink="false">http://www.lazysa.com/?p=720</guid><dc:creator>lazysa</dc:creator></item><item><title>sed用法实例</title><link>http://www.lazysa.com/2009/08/716.html</link><content:encoded>&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;FILE SPACING:&lt;/span&gt; &lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;TEXT-ALIGN: left&quot;&gt;# double space a file&lt;br /&gt;
#使一个文件中每一行都占用两行空间(就是在每一行后边插一行空行)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed G&lt;br /&gt;
&lt;/span&gt;###sed 中G命令的解释为append hold space to pattern space.&lt;br /&gt;
###就是在当前位置后加一行保留空间中的内容，无任何动作时，保留空间为空行&lt;br /&gt;
###所以就double space a file 了，呵呵．&lt;/p&gt;
&lt;p&gt;# double space a file which already has blank lines in it. Output file&lt;br /&gt;
# should contain no more than one blank line between lines of text.&lt;br /&gt;
#假若文件已经含有空白行在其中，使一个文件中每一行占用两行&lt;br /&gt;
#空间。输出文件中文本行之间不含有超过一行的空行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/^$/d;G&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###先用sed &amp;#8216;/^$/d&amp;#8217; 查找并删除空行；然后用 sed G插入空行&lt;/p&gt;
&lt;p&gt;# triple space a file&lt;br /&gt;
#使一个文件中每一行都占用三行空间(就是在每一行后边插两行空行)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;G;G&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###不用说了吧，重复两次sed G.&lt;/p&gt;
&lt;p&gt;# undo double-spacing (assumes even-numbered lines are always blank)&lt;br /&gt;
#撤销占用两行空间的操作(假设偶数行都是空白行)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;n;d&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###sed 中命令n的解释为Read　the next line of input into the pattern space．&lt;br /&gt;
###所以我理解为用sed n 读入下一行兵紧接着用sed d 删除，如果隔两行删除一行那么&lt;br /&gt;
###用sed &amp;#8216;n,n,d&amp;#8217;,要是隔100行删除一行呢&amp;#8230;.什么???!!!你要写100个n???!!!&lt;/p&gt;
&lt;p&gt;# insert a blank line above every line which matches &amp;#8220;regex&amp;#8221;&lt;br /&gt;
#在每个含有字符串regex的行上插入一行空白行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/regex/{x;p;x;}&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###sed 中命令x解释为Exchange the contents of the hold and pattern spaces.&lt;br /&gt;
###我的理解也就是交换保留空间与模式空间的内容&lt;br /&gt;
###sed 中命令p为Print the current pattern space．就是打印模式空间中的内容．&lt;br /&gt;
###所以理解为保留空间中开始为空行，模式空间中经过sed &amp;#8216;/regex/&amp;#8217;查询后为包含&lt;br /&gt;
###regex内容的那一行，1)x;交换模式空间和保留空间的内容，此时模式空间中内容&lt;br /&gt;
###为空行，保留空间中内容为含有regex内容的行， 2)p；命令打印模式空间内容(&lt;br /&gt;
###空行)，在原文中含有regex内容的那一行的位置出现两行空行，其中后一行为&lt;br /&gt;
###模式空间中的内容，3)x;后交换模式空间和保留空间中的内容，．．．．结果就是在原&lt;br /&gt;
###来出现regex的位置前一行加入了一行空行。&lt;/p&gt;
&lt;p&gt;# insert a blank line below every line which matches &amp;#8220;regex&amp;#8221;&lt;br /&gt;
# 在每个含有字符串regex的行下插入一行空白行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/regex/G&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###比较简单，查找后在后边加入一空行&lt;/p&gt;
&lt;p&gt;# insert a blank line above and below every line which matches &amp;#8220;regex&amp;#8221;&lt;br /&gt;
#在每个含有字符串regex的行上，下各插入一行空白行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/regex/{x;p;x;G;}&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###兄弟两个sed &amp;#8216;/regex/G&amp;#8217;和sed &amp;#8216;/regex/{x;p;x;}&amp;#8217;合作的结果．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;NUMBERING:&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;# number each line of a file (simple left alignment) Using a tab (see&lt;br /&gt;
# note on &amp;#8216;\t&amp;#8217; at end of file)instead of space will preserve margins.&lt;br /&gt;
#给文件每一行加上数字序号。用TAB制表符替换空间来保留空白(?)&lt;br /&gt;
#(在数字序号和文本中间加一TAB制表符)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed = filename | sed &amp;#8216;N;s/\n/\t/&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###sed = filename的功能是 Print the current line number.&lt;br /&gt;
###但是这个功能是在每一行前面另加一行，并且显示行号,而不是直接在行首加序号&lt;br /&gt;
###sed中命令N的解释为Append the next line of input into the pattern space.&lt;br /&gt;
###也就是把当前行后一行的内容加在当前行后边．&lt;br /&gt;
###sed中命令s/regexp/replacement/解释为Attempt to match regexp against the&lt;br /&gt;
###pattern space. If successful, replace that portion matched with&lt;br /&gt;
### replacement.大概意思是在模式空间外匹配regexp，如果成功，使用匹配replace&lt;br /&gt;
###ment的内容替换regexp.说白了就是查找替换吧．\n是换行符,\t是TAB制表符,&lt;br /&gt;
###所以整个命令的意思也就出来了．&lt;/p&gt;
&lt;p&gt;# number each line of a file (nnumber on left, right-aligned)&lt;br /&gt;
#给文件每一行加上数字序号(数字在左边，向右对齐？)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed = filename | sed &amp;#8216;N; s/^/ /; s/ *\(.\{6,\}\)\n/\1 /&amp;#8217;&lt;/span&gt;&lt;br /&gt;
### 前面不用说了，但是后边&amp;#8230;&amp;#8230;&lt;br /&gt;
###s/ *\(.\{6,\}\)\n/\1 /&amp;#8217; 这个地方确实不是很明白!~~&lt;/p&gt;
&lt;p&gt;# number each line of file, but only print numbers if line is not blank&lt;br /&gt;
#给文件每一行加上数字序号，但是仅当行非空时打印数字&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/./=&amp;#8217; filename | sed &amp;#8216;/./N; s/\n/ /&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###sed &amp;#8216;/./=&amp;#8217; filename的用处是查找除非空行赋予行号,sed &amp;#8216;/./N; s/\n/ /&amp;#8217;查找非&lt;br /&gt;
##空行并把后一行附加到当前行,然后用空格替换换行符\n&lt;/p&gt;
&lt;p&gt;# count lines (emulates &amp;#8220;wc -l&amp;#8221;)&lt;br /&gt;
#统计行数(类似于 &amp;#8220;wc -l&amp;#8221;)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -n &amp;#8216;$=&amp;#8217;&lt;/span&gt;&lt;br /&gt;
#sed中参数n的含义是suppress automatic printing of pattern space,也就是限制&lt;br /&gt;
###自动打印模式空间中内容的功能， &amp;#8216;$=&amp;#8217;中$的含义是Match the last line，=前边&lt;br /&gt;
###已经说过了，就是打印行号，所以匹配最后一行而且只打印行号不打印内容，就是&lt;br /&gt;
###&amp;#8221;wc -l&amp;#8221;了&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;TEXT CONVERSION AND SUBSTITUTION:&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;# IN UNIX ENVIRONMENT: convert DOS newlines (cR/LF)to Unix format&lt;br /&gt;
#在UNIX环境下：转换DOS换行符(?)(cR/LF)UNIX格式&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/.$//&amp;#8217; # assumes that all lines end with CR/LF&lt;/span&gt;&lt;br /&gt;
# 假设所有的行都以CR/LF结尾&lt;br /&gt;
###可能在DOS中的ASCII码(包括CR/LF)到了UNIX中都成了单字符吧，又因为&amp;#8221;.$&amp;#8221;代表&lt;br /&gt;
###每行最后一个字符，所以把它们替换掉就OK了．CR/LF是啥？CR&amp;#8212;ASCII Carriage&lt;br /&gt;
###Return(ASCII 回车) ,LF&amp;#8212;-ASCII Linefeed (ASCII换行)&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/^M$//&amp;#8217; # in bash/tcsh, press Ctrl-V then Ctrl-M&lt;/span&gt;&lt;br /&gt;
#在bash/tcsh中，按下Ctrl-V然后按 Ctrl-M&lt;br /&gt;
###没啥说的，就是查找替换，注意命令中&amp;#8221;^M&amp;#8221;在输入时一定是按下Ctrl-V然后按 Ctrl-M&lt;br /&gt;
###如果输入成ctrl+6键，然后输入一个大写M,什么替换也完成不了啦．&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/\x0D$//&amp;#8217; # gsed 3.02.80, but top script is easier&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;###不是很了解！高手说一下吧！&lt;/p&gt;
&lt;p&gt;# IN UNIX ENVIRONMENT: convert Unix newlines (F)to DOS format&lt;br /&gt;
#在unix环境中：转换Unix换行符(F)DOS格式&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8220;s/$/`echo -e \\\r`/&amp;#8221; # command line under ksh&lt;/span&gt;&lt;br /&gt;
　　　　　　　　　　　　　#在ksh下的命令行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/$&amp;#8217;&amp;#8221;/`echo \\\r`/&amp;#8221; # command line under bash&lt;/span&gt;&lt;br /&gt;
　　　　　　　　　　　　 #在bash下的命令行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8220;s/$/`echo \\\r`/&amp;#8221; # command line under zsh&lt;/span&gt;&lt;br /&gt;
#在zsh下的命令行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/$/\r/&amp;#8217; # gsed 3.02.80&lt;/span&gt;&lt;br /&gt;
　　　　　　　# gsed3.02.80版本下的命令行&lt;br /&gt;
###以上四个命令是在不同的shell版本下用\r(好象就是ASCII码下的CR)替换行尾&lt;/p&gt;
&lt;p&gt;# IN DOS ENVIRONMENT: convert Unix newlines (F)to DOS format&lt;br /&gt;
#在DOS环境下转换Unix换行符到DOS格式&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8220;s/$//&amp;#8221; # method 1&lt;br /&gt;
sed -n p # method 2&lt;/span&gt;&lt;br /&gt;
###这句又不是很了解，本来$就是行尾了，把行尾替换成空，那就变成了DOS格式了吗？&lt;br /&gt;
###下边一句也很奇怪，参数-n是suppress automatic printing of pattern space，命&lt;br /&gt;
###令p是Print the current pattern space，一正一反就换成DOS格式了？乖乖~~&lt;/p&gt;
&lt;p&gt;# IN DOS ENVIRONMENT: convert DOS newlines (cR/LF)to Unix format&lt;br /&gt;
#在Dos环境下：转换DOS换行符为UNIX格式&lt;br /&gt;
# Cannot be done with DOS versions of sed. Use &amp;#8220;tr&amp;#8221; instead.&lt;br /&gt;
#用DOS版本的sed不能做到这点，用&amp;#8221;tr&amp;#8221;代替．&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;tr -d \r outfile # GNU tr version 1.22 or higher&lt;/span&gt;&lt;br /&gt;
　　　　　　　　　　　　　#GNU tr 1.22版本或者更高版本&lt;/p&gt;
&lt;p&gt;# delete leading whitespace (spaces, tabs)from front of each line&lt;br /&gt;
# aligns all text flush left&lt;br /&gt;
#删除每一行开头的空白(空格，TAB)左对齐排列全文．&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/^[ \t]*//&amp;#8217; # see note on &amp;#8216;\t&amp;#8217; at end of file&lt;/span&gt;&lt;br /&gt;
　　　　　　　&lt;br /&gt;
### 又是替换成空，^[ \t]* 的含义为以空格或者TAB键开始的(或者是他们的组合)行．&lt;/p&gt;
&lt;p&gt;# delete trailing whitespace (spaces, tabs)from end of each line&lt;br /&gt;
#从每一行结尾处删除最后的空格(空格,TAB)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/[ \t]*$//&amp;#8217; # see note on &amp;#8216;\t&amp;#8217; at end of file&lt;/span&gt;&lt;br /&gt;
### 跟上边的命令&amp;#8221;前呼后拥&amp;#8221;呀．&lt;/p&gt;
&lt;p&gt;# delete BOTH leading and trailing whitespace from each line&lt;br /&gt;
#删除每一行的开头和结尾的空格&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/^[ \t]*//;s/[ \t]*$//&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###两步走．&lt;/p&gt;
&lt;p&gt;# insert 5 blank spaces at beginning of each line (ake page offset)&lt;br /&gt;
#在每一行开始处插入5个空格(整页偏移)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/^/ /&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###没啥说的．&lt;/p&gt;
&lt;p&gt;# align all text flush right on a 79-column width&lt;br /&gt;
#右对齐，按79列宽排列所有文本&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -e :a -e &amp;#8217;s/^.\{1,78\}$/ &amp;amp;/;ta&amp;#8217; # set at 78 plus 1 space&lt;/span&gt;&lt;br /&gt;
###这个语句好像很麻烦，不过看懂了还挺有意思．：）&lt;br /&gt;
###首先出现了几个新东东1.&amp;#8221;:&amp;#8221; 2.&amp;#8221;&amp;amp;&amp;#8221;. 3. &amp;#8220;-e &amp;#8221; 4.&amp;#8221;t&amp;#8221;，解释一下&lt;br /&gt;
###1.&amp;#8221;:&amp;#8221; Label for b and t commands.(给b和t命令加注标签)&lt;br /&gt;
###2.&amp;#8221;&amp;amp;&amp;#8221;　表示重复整个匹配的规则表达式．&lt;br /&gt;
###3. &amp;#8220;-e&amp;#8221; add the script to the commands to be executed&lt;br /&gt;
### 把脚本加到命令里用以执行&lt;br /&gt;
###4. t label If a s/// has done a successful substitution since the last&lt;br /&gt;
###input line was read and since the last t or T command, then branch to&lt;br /&gt;
###label; if label is omitted, branch to end of script.&lt;br /&gt;
###如果从读入最后一个输入行并且执行最后一个t或者T命令后，一个s///命令成功替换，&lt;br /&gt;
###那么流程分支指向label处，如果label被忽略(就是没有成功替换吧，我想),那么流程&lt;br /&gt;
###分支指向脚本结束．&lt;br /&gt;
###回过头来看，整个sed命令行是一个循环执行的语句，每一行都要替换(78-当前行的字&lt;br /&gt;
###符数)次,所以如果整个文件比较大，或者一行字符数比较少，做这个动作就有点吃力了．&lt;br /&gt;
###不信你试试吧，呵呵．&lt;/p&gt;
&lt;p&gt;# center all text in the middle of 79-column width. In method 1,&lt;br /&gt;
# spaces at the beginning of the line are significant, and trailing&lt;br /&gt;
# spaces are appended at the end of the line. In method 2, spaces at&lt;br /&gt;
# the beginning of the line are discarded in centering the line, and&lt;br /&gt;
# no trailing spaces appear at the end of lines.&lt;br /&gt;
#使所有文本居于79列宽的格式中央。在第一种方法中，每一行开头处的空格是&lt;br /&gt;
#很重要的，最后的空格被附在行尾。第二种方法中，一行开头的空格在中心对&lt;br /&gt;
#齐的行中被丢弃，行尾也没有原来结尾处的空格。&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -e :a -e &amp;#8217;s/^.\{1,77\}$/ &amp;amp; /;ta&amp;#8217; # method 1&lt;br /&gt;
sed -e :a -e &amp;#8217;s/^.\{1,77\}$/ &amp;amp;/;ta&amp;#8217; -e &amp;#8217;s/\(*\)1/\1/&amp;#8217; # method 2&lt;/span&gt;&lt;br /&gt;
###跟上边的差不多,当两边都加空格的时候，效率要高一些~~&lt;/p&gt;
&lt;p&gt;# substitute (ind and replace)&amp;#8221;foo&amp;#8221; with &amp;#8220;bar&amp;#8221; on each line&lt;br /&gt;
#在每一行中用&amp;#8221;bar&amp;#8221;替换(找并替换)foo&amp;#8221;&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/foo/bar/&amp;#8217; # replaces only 1st instance in a line&lt;br /&gt;
&lt;/span&gt;# 在一行中，仅在第一次出现时替换&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/foo/bar/4&amp;#8242; # replaces only 4th instance in a line&lt;/span&gt;&lt;br /&gt;
#在一行中，仅在第四次出现时替换&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/foo/bar/g&amp;#8217; # replaces ALL instances in a line&lt;/span&gt;&lt;br /&gt;
#在一行中替换所有出现的值&lt;br /&gt;
###这三个命令很简单,不多说了.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/\(.*\)foo\(.*foo\)/\1bar\2/&amp;#8217; # replace the next-to-last case&lt;/span&gt;&lt;br /&gt;
#替换紧邻最后一个匹配出现的值&lt;br /&gt;
###&amp;#8217;s///&amp;#8212;- The replacement may contain the special character &amp;amp; to refer to that&lt;br /&gt;
###portion of the pattern space which matched, and the special escapes \1&lt;br /&gt;
### through \9 to refer to the corresponding matching sub-expressions in the regexp.&lt;br /&gt;
###就不直接翻译了，大概意思就是replacement处可以包含&amp;amp;代表匹配的模式空间中&lt;br /&gt;
###的部分,特殊的\1-\9可以代表regexp中相应的&amp;#8221;子表达式&amp;#8221;,也就是说前面regexp&lt;br /&gt;
###可以分为几个子表达式,而后边replacement中可以用\1-\9分别代表它们.这样就&lt;br /&gt;
###增加了灵活性，便于修改sed命令.&lt;br /&gt;
###把regexp中的\去掉后，就变成(.*)foo(*foo),其中(.*)表示零个或者多个字符，&lt;br /&gt;
###这样加上后边的\1bar\2就变成了改变倒数第二个foo,而倒数第一个不变&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/\(*\)foo/\1bar/&amp;#8217; # replace only the last case&lt;/span&gt;&lt;br /&gt;
#只替换最后一个值&lt;br /&gt;
###比上一个简单&lt;/p&gt;
&lt;p&gt;# substitute &amp;#8220;foo&amp;#8221; with &amp;#8220;bar&amp;#8221; ONLY for lines which contain &amp;#8220;baz&amp;#8221;&lt;br /&gt;
#在每一含有&amp;#8221;baz&amp;#8221;的行中用&amp;#8221;bar&amp;#8221;替换(查找并替换)foo&amp;#8221;&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/baz/s/foo/bar/g&amp;#8217;&lt;/span&gt;&lt;br /&gt;
### /baz/用来查找，后边的用来替换&lt;/p&gt;
&lt;p&gt;# substitute &amp;#8220;foo&amp;#8221; with &amp;#8220;bar&amp;#8221; EXCEPT for lines which contain &amp;#8220;baz&amp;#8221;&lt;br /&gt;
#在每一不含有&amp;#8221;baz&amp;#8221;的行中用&amp;#8221;bar&amp;#8221;替换(找并替换)foo&amp;#8221;&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/baz/!s/foo/bar/g&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###反其道而行之．&lt;/p&gt;
&lt;p&gt;# change &amp;#8220;scarlet&amp;#8221; or &amp;#8220;ruby&amp;#8221; or &amp;#8220;puce&amp;#8221; to &amp;#8220;red&amp;#8221;&lt;br /&gt;
#将&amp;#8221;scarlet&amp;#8221;或者&amp;#8221;ruby&amp;#8221;或者&amp;#8221;puce&amp;#8221;替换成&amp;#8221;red&amp;#8221;&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/scarlet/red/g;s/ruby/red/g;s/puce/red/g&amp;#8217; # most seds&lt;/span&gt;&lt;br /&gt;
#大多数sed可用&lt;br /&gt;
###三步走．&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;gsed &amp;#8217;s/scarlet\|ruby\|puce/red/g&amp;#8217; # GNU sed only&lt;/span&gt;&lt;br /&gt;
#仅GNU sed可用&lt;/p&gt;
&lt;p&gt;# reverse order of lines (emulates &amp;#8220;tac&amp;#8221;)&lt;br /&gt;
#反转文章行的顺序(类似&amp;#8221;tac&amp;#8221; )&lt;br /&gt;
# bug/feature in HHsed v1.5 causes blank lines to be deleted&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;1!G;h;$!d&amp;#8217; # method 1&lt;/span&gt;&lt;br /&gt;
###&lt;br /&gt;
###首先看第一个命令1!G，这个是啥意思?&amp;#8221;!&amp;#8221;表示后边的命令对所有没有&lt;br /&gt;
###被选定的行发生作用，G呢？获得保留空间(专业名词叫内存缓冲区?)中&lt;br /&gt;
###的内容，并追加到当前模式空间的后面.1就是选定第一行.h的含义是拷贝&lt;br /&gt;
###模式空间内容到保留空间(内存缓冲区)。那么先看 sed &amp;#8216;1!G&amp;#8217;什么含义&lt;br /&gt;
###执行一下这个命令，假若文件是&lt;br /&gt;
### $ cat test.txt&lt;br /&gt;
### 1&lt;br /&gt;
### 2&lt;br /&gt;
### 3&lt;br /&gt;
### 4&lt;br /&gt;
###那么 sed &amp;#8216;1!G&amp;#8217; test.txt的结果是&lt;br /&gt;
### $ sed &amp;#8216;1!G&amp;#8217; test.txt&lt;br /&gt;
### 1&lt;br /&gt;
### 2&lt;br /&gt;
###&lt;br /&gt;
### 3&lt;br /&gt;
###&lt;br /&gt;
### 4&lt;br /&gt;
###&lt;br /&gt;
### $&lt;br /&gt;
### 也就是说除了第一行,后边每行都加了空行,这是因为内存缓冲区中默认值&lt;br /&gt;
###是空行吧。然后我们加上h,看看发生什么&lt;br /&gt;
### $ sed &amp;#8216;1!G;h&amp;#8217; test.txt&lt;br /&gt;
### 1&lt;br /&gt;
### 2&lt;br /&gt;
### 1&lt;br /&gt;
### 3&lt;br /&gt;
### 2&lt;br /&gt;
### 1&lt;br /&gt;
### 4&lt;br /&gt;
### 3&lt;br /&gt;
### 2&lt;br /&gt;
### 1&lt;br /&gt;
### $&lt;br /&gt;
### 空行没了，咋回事?我是这样理解的，不知道对不对，大家帮助看看：）&lt;br /&gt;
###首先要确定，执行到每一行，sed把当前处理的行存在临时的缓冲区内，&lt;br /&gt;
###称为模式空间(pattern space).一旦sed完成对模式空间中行的处理，模式&lt;br /&gt;
###空间中的行就被送往屏幕．行被处理完成后，就被移出模式空间．．．&lt;br /&gt;
###&lt;br /&gt;
###命令执行第一行时，由于匹配了第一行，所以&amp;#8221;!G&amp;#8221;不起作用，只打印了&lt;br /&gt;
###第一行的内容，然后&amp;#8221;h&amp;#8221;把模版块中的内容也就是第一行的内容拷贝进缓冲区，&lt;br /&gt;
###注意此时是用第一行的内容替换空行.模式空间中的内容要打印，所以出现1.&lt;br /&gt;
###执行到第二行时，打印第二行内容，而且由于不匹配&amp;#8221;1&amp;#8243;,所以在后边&amp;#8221;G&amp;#8221;命令起&lt;br /&gt;
###作用,获得了缓冲区中的第一行的内容，然后加到当前模式空间中，并打印,出现&lt;br /&gt;
###21。然后把模式空间中的内容写入缓冲区，也就是把21写入缓冲区。执行到第三行&lt;br /&gt;
###匹配不成功,所以缓冲区的内容应该是第二行的内容加上第一行的内容，追加到模&lt;br /&gt;
###式空间的第三行后边：321.然后把321拷贝到缓冲区，．．．以此类推就出现了上&lt;br /&gt;
###面的结果.&lt;br /&gt;
###我不知道这么解释对不对，但是当我把命令中的1换成2，3，4后执行，得到了我&lt;br /&gt;
###想象的结果。还请高手指点~~&lt;br /&gt;
###加上最后一句&amp;#8221;$!d&amp;#8221;,那就是前面三行的结果删除，保留最后一行。这样就形成了&lt;br /&gt;
### tac的效果啦。&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -n &amp;#8216;1!G;h;$p&amp;#8217; # method 2&lt;br /&gt;
&lt;/span&gt;###与上边类似的，不罗嗦!&lt;/p&gt;
&lt;p&gt;# reverse each character on the line (emulates &amp;#8220;rev&amp;#8221;)&lt;br /&gt;
#反转一行中每个字符的顺序(类似&amp;#8221;rev&amp;#8221;)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/\n/!G;s/\(.\)\(.*\n\)/&amp;amp;\2\1/;//D;s/.//&amp;#8217;&lt;br /&gt;
&lt;/span&gt;###这个命令真是&amp;#8230;..&lt;br /&gt;
###我是在解释不通,所以按照我的想法来说一下吧,完全是瞎说!&lt;br /&gt;
###&amp;#8217;/\n/!G&amp;#8217;是判断本行是否有换行符,如果没有执行G命令&lt;br /&gt;
###&amp;#8217;s/\(.\)\(.*\n\)/&amp;amp;\2\1/&amp;#8217;命令是在原来行+第二个字符(或者没有)开始到换行符+第一个字符&lt;br /&gt;
###//D命令是在模式空间删除第一行,注意执行完成后如果模式空间不为空，继续下一个&lt;br /&gt;
###循环执行.&lt;br /&gt;
###s/.//命令是删除第一个字符&lt;br /&gt;
###假设一行文字是 123\n&lt;br /&gt;
###那么执行后模式空间中的内容应该按下边的顺序变化&lt;br /&gt;
### 123\n&lt;br /&gt;
### 123\n23\n1&lt;br /&gt;
### 23\n1&lt;br /&gt;
### 23\n13\n21&lt;br /&gt;
### 13\n21&lt;br /&gt;
### 3\n21&lt;br /&gt;
### 3\n21\n321&lt;br /&gt;
### \n321&lt;br /&gt;
### 321&lt;br /&gt;
### 我的疑问就是,为什么第一次没有执行s/.//?!如果执行了,那么就得不到结果了啊!&lt;br /&gt;
### 救~~~~命~~~啊！????????????????????????????????&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;QUOTE:&lt;br /&gt;
原帖由 &amp;#8220;waker&amp;#8221; 发表：&lt;br /&gt;
#反转一行中每个字符的顺序(类似&amp;#8221;rev&amp;#8221;)&lt;br /&gt;
sed &amp;#8216;/\n/!G;s/\(.\)\(.*\n\)/&amp;amp;\2\1/;//D;s/.//&amp;#8217;&lt;br /&gt;
###假设一行文字是 123&lt;br /&gt;
###那么执行后模式空间中的内容应该按下边的顺序变化&lt;br /&gt;
执行/\n/!G;得&lt;br /&gt;
123\n&lt;br /&gt;
然后s/\(.\)\(.*\n\)/&amp;amp;\2\1/;&lt;br /&gt;
得&lt;br /&gt;
123\n23\n1&lt;br /&gt;
执行//D&lt;br /&gt;
23\n1&lt;br /&gt;
因为是D命令所以从头循环&lt;br /&gt;
模式空间有\n&lt;br /&gt;
所以/\n/!G;中G不执行&lt;br /&gt;
再来s&amp;#8230;&lt;br /&gt;
23\n3\n21&lt;br /&gt;
再D&lt;br /&gt;
3\n21&lt;br /&gt;
循环,G不执行&lt;br /&gt;
再来s&amp;#8230;&lt;br /&gt;
3\n\n321&lt;br /&gt;
再D&lt;br /&gt;
\n321&lt;br /&gt;
循环&lt;br /&gt;
G和s和D都不执行&lt;br /&gt;
执行最后的s/.//&lt;br /&gt;
321&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;# join pairs of lines side-by-side (like &amp;#8220;paste&amp;#8221;)&lt;br /&gt;
#把两行合为一行(类似于&amp;#8221;paste&amp;#8221;)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;$!N;s/\n/ /&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###这个命令改成 sed &amp;#8216;N;s/\n/ /&amp;#8217;一样可以达到目的，不知前面&lt;br /&gt;
###的$!有什么用处&amp;#8230;&lt;/p&gt;
&lt;p&gt;# if a line ends with a backslash, append the next line to it&lt;br /&gt;
#如果一行以&amp;#8221;\&amp;#8221;结束，把下一行加在此行上&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -e :a -e &amp;#8216;/\\$/N; s/\\\n//; ta&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###循环操作，两次替换。&lt;/p&gt;
&lt;p&gt;# if a line begins with an equal sign, append it to the previous line&lt;br /&gt;
# and replace the &amp;#8220;=&amp;#8221; with a single space&lt;br /&gt;
#如果一等号开始某一行，把这一行加到前一行后边，并且用一个空格替换等号&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -e :a -e &amp;#8216;$!N;s/\n=/ /;ta&amp;#8217; -e &amp;#8216;P;D&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###和上边差不多，要注意两个新的命令:&lt;br /&gt;
### P命令&amp;#8211;Print up to the first embedded newline of the current&lt;br /&gt;
###pattern space.打印当前模式空间中第一行。&lt;br /&gt;
###D命令&amp;#8211;Delete up to the first embedded newline in&lt;br /&gt;
### the pattern space. Start next cycle, but skip reading from&lt;br /&gt;
###the input if there is still data in the pattern space.&lt;br /&gt;
###删除当前模式空间中第一行。开始新的循环，但是如果在模式空间中仍然&lt;br /&gt;
###有数据，那么跳过读取输入。&lt;/p&gt;
&lt;p&gt;# add commas to numeric strings, changing &amp;#8220;1234567&amp;#8243; to &amp;#8220;1,234,567&amp;#8243;&lt;br /&gt;
#给数字串加逗号，把&amp;#8221;1234567&amp;#8243;变为&amp;#8221;1,234,567&amp;#8243;&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;gsed &amp;#8216;:a;s/\B[0-9]\{3\}\&amp;gt;/,&amp;amp;/;ta&amp;#8217; # GNU sed&lt;br /&gt;
sed -e :a -e &amp;#8217;s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta&amp;#8217; # other seds&lt;/span&gt;&lt;br /&gt;
###(.*[0-9])表示零个或者多个字符(可能包含数字)+一个数字,而&lt;br /&gt;
###([0-9]{3})表示三个数字,然后不停的替换,直到条件不成立,也就是没有&lt;br /&gt;
###四个以上连续的数字出现就停止了.&lt;/p&gt;
&lt;p&gt;# add commas to numbers with decimal points and minus signs (NU sed)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;#给带有小数点和负号的数字的数字加上逗号&lt;br /&gt;
gsed &amp;#8216;:a;s/\(^\|[^0-9.]\)\([0-9]\+\)\([0-9]\{3\}\)/\1\2,\3/g;ta&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###没有gsed，不解释了&lt;/p&gt;
&lt;p&gt;# add a blank line every 5 lines (after lines 5, 10, 15, 20, etc.)&lt;br /&gt;
#每五行后加一空行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;gsed &amp;#8216;0~5G&amp;#8217; # GNU sed only&lt;br /&gt;
sed &amp;#8216;n;n;n;n;G;&amp;#8217; # other seds&lt;/span&gt;&lt;br /&gt;
###一大早就说过了的&amp;#8230;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;SELECTIVE PRINTING OF CERTAIN LINES:&lt;/span&gt; &lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;# print first 10 lines of file (emulates behavior of &amp;#8220;head&amp;#8221;)&lt;br /&gt;
#打印一个文件的前10行(模仿动作&amp;#8221;head&amp;#8221;)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed 10q&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# print first line of file (emulates &amp;#8220;head -1&amp;#8243;)&lt;br /&gt;
#打印一个文件的第一行(仿&amp;#8221;head -1&amp;#8243;)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed q&lt;/span&gt;&lt;br /&gt;
### q命令的解释Immediately quit the sed script without processing&lt;br /&gt;
###any more input, except that if auto-print is not disabled the&lt;br /&gt;
###current pattern space will be printed.&lt;br /&gt;
### 所以上边两个命令都清楚了，执行到第10行退出就打印前10行，执行第一行&lt;br /&gt;
###就退出就打印第一行&lt;/p&gt;
&lt;p&gt;# print the last 10 lines of a file (emulates &amp;#8220;tail&amp;#8221;)&lt;br /&gt;
#打印一个文件的后10行(仿&amp;#8221;tail&amp;#8221;)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -e :a -e &amp;#8216;$q;N;11,$D;ba&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###Label b : Branch to label; if label is omitted, branch to end of script.&lt;br /&gt;
###命令D 删除模式空间内第一个 newline 字母 \n 前的资料。&lt;br /&gt;
###命令N 把输入的下一行添加到模式空间中。&lt;br /&gt;
### b label:分支到脚本中带有标号的地方，如果标号不存就分支到脚本的末尾&lt;br /&gt;
###&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;QUOTE:&lt;br /&gt;
原帖由 &amp;#8220;waker&amp;#8221; 发表：&lt;br /&gt;
试着注一下，不知道对不对&lt;/p&gt;
&lt;p&gt;如果我们只看sed -e :a -e &amp;#8216;$q;N;ba&amp;#8217;&lt;br /&gt;
这个循环不停的读入下 一行直到结尾，这样整个文本就形成一个由\n分割的链&lt;/p&gt;
&lt;p&gt;现在加上11,$D&lt;br /&gt;
sed -e :a -e &amp;#8216;$q;N;11,$D;ba&amp;#8217;&lt;br /&gt;
如果文本不超过10行&lt;br /&gt;
模式空间将保留整个文本打印出来&lt;br /&gt;
如果文本大于10行从第11行开始，在下一行加入到链中后，模式空间第一个由\n分割的记录将被删除，这样看起来就是链头被链尾挤出整个链，总是保持10个链环，循环结束后，链中保存的就是文件的后10行,最后印出结果&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;# print the last 2 lines of a file (emulates &amp;#8220;tail -2&amp;#8243;)&lt;br /&gt;
#打印一个文件的最后两行(仿&amp;#8221;tail -2&amp;#8243;)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;$!N;$!D&amp;#8217;&lt;/span&gt;&lt;br /&gt;
### 开始看不太懂，抄了CU精华一段&lt;br /&gt;
###sed &amp;#8216;$!N;$!D&amp;#8217; : 对文件倒数第二行以前的行来说，N 将当前行的下一行放到模&lt;br /&gt;
###式空间中以后，D 就将模式空间的内容删除了；到倒数第二行的时候，将最后一行&lt;br /&gt;
###附加到倒数第二行下面，然后最后一行不执行 D ，所以文件的最后两行都保存下来了。&lt;br /&gt;
###不知道是这段话说得有些含糊，还是我理解得有偏差，总觉得D命令解释成&lt;br /&gt;
###&amp;#8221;将模式空间的内容删除了&amp;#8221;有些让人糊涂.&lt;br /&gt;
###而我是这样理解的，不知道对不对.首先说D命令是 Delete up to the first&lt;br /&gt;
###embedded newline in the pattern space.也就是说D命令是删除模式空间中&lt;br /&gt;
###第一个换行符之前的内容，也就是删除第一行.然后D命令的解释还有一句,我认为&lt;br /&gt;
###这句很重要: Start next cycle, but skip reading from the input if there&lt;br /&gt;
### is still data in the pattern space.开始下一个循环，但是如果模式空间中有&lt;br /&gt;
###数据，则跳过从输入中读取数据.&lt;br /&gt;
###具体怎么工作呢? 假设文件为&lt;br /&gt;
### $ cat test.txt&lt;br /&gt;
### 1&lt;br /&gt;
### 2&lt;br /&gt;
### 3&lt;br /&gt;
### 4&lt;br /&gt;
### 5&lt;br /&gt;
### 那么当执行第一行时,$!N把第二行加入到模式空间中第一行后边,然后$!D把第一行&lt;br /&gt;
###内容删除，模式空间中只剩下第二行的内容.注意,此时由于D命令开始下一个循环，&lt;br /&gt;
###所以不打印模式空间中的内容! (这个地方也是我想了半天才这么解释的，我也知道&lt;br /&gt;
###很可能不对，欢迎拍砖，呵呵)由于D命令要求模式空间中有数据的话就跳过读取下一行，&lt;br /&gt;
###所以继续下一个循环又到了$!N，此时读入第三行加到第二行后边，&amp;#8230;.以此类推。&lt;br /&gt;
###执行到读入第5行附加在第四行后边，然后由于$!D得不到执行，所以第4行和第5行&lt;br /&gt;
###都被保留，命令结束，打印模式空间&amp;#8230;&lt;/p&gt;
&lt;p&gt;# print the last line of a file (emulates &amp;#8220;tail -1&amp;#8243;)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;#打印一个文件的最后一行(仿&amp;#8221;tail -1&amp;#8243;)&lt;br /&gt;
sed &amp;#8216;$!d&amp;#8217; # method 1&lt;br /&gt;
sed -n &amp;#8216;$p&amp;#8217; # method 2&lt;/span&gt;&lt;br /&gt;
###哈哈，终于看懂了一个，你也看懂了吧　：）&lt;/p&gt;
&lt;p&gt;# print only lines which match regular expression (emulates &amp;#8220;grep&amp;#8221;)&lt;br /&gt;
#只打印匹配的一定字符的行(仿&amp;#8221;grep&amp;#8221;)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -n &amp;#8216;/regexp/p&amp;#8217; # method 1&lt;br /&gt;
sed &amp;#8216;/regexp/!d&amp;#8217; # method 2&lt;/span&gt;&lt;br /&gt;
###明白参数-n和命令p和d就明白这两个命令．&lt;/p&gt;
&lt;p&gt;# print only lines which do NOT match regexp (emulates &amp;#8220;grep -v&amp;#8221;)&lt;br /&gt;
#只打印于一定字符不匹配的行(效&amp;#8221;grep -v&amp;#8221;)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -n &amp;#8216;/regexp/!p&amp;#8217; # method 1, corresponds to above&lt;br /&gt;
sed &amp;#8216;/regexp/d&amp;#8217; # method 2, simpler syntax&lt;/span&gt;&lt;br /&gt;
###和上边相反，正如注释所说．&lt;/p&gt;
&lt;p&gt;# print the line immediately before a regexp, but not the line&lt;br /&gt;
# containing the regexp&lt;br /&gt;
#打印包含&amp;#8221;regexp&amp;#8221;那一行的上一行,但是不打印包含&amp;#8221;regexp&amp;#8221;的行.&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -n &amp;#8216;/regexp/{g;1!p;};h&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###在命令执行到包含&amp;#8221;regexp&amp;#8221;那一行的上一行时,模式空间中这行的内容被&lt;br /&gt;
###拷贝到保留空间中．执行到包含&amp;#8221;regexp&amp;#8221;那一行时就打印它了.&lt;/p&gt;
&lt;p&gt;# print the line immediately after a regexp, but not the line&lt;br /&gt;
# containing the regexp&lt;br /&gt;
#打印在&amp;#8221;regexp&amp;#8221;之后紧跟那一行，但是除去包含&amp;#8221;regexp&amp;#8221;的行.&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -n &amp;#8216;/regexp/{n;p;}&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###与上边类似，比上边简单．&lt;/p&gt;
&lt;p&gt;# print 1 line of context before and after regexp, with line number&lt;br /&gt;
# indicating where the regexp occurred (imilar to &amp;#8220;grep -A1 -B1&amp;#8243;)&lt;br /&gt;
#在&amp;#8221;regexp&amp;#8221;前后打印一行上下文，使其行号指示&amp;#8221;regexp&amp;#8221;在哪里出现(&lt;br /&gt;
#grep -A1 -B1相似)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -n -e &amp;#8216;/regexp/{=;x;1!p;g;$!N;p;D;}&amp;#8217; -e h&lt;/span&gt;&lt;br /&gt;
###看上去好像挺复杂，其实倒是不难解释．&lt;br /&gt;
###假设文档是这样&lt;br /&gt;
###$ cat test.txt&lt;br /&gt;
### 1 abc&lt;br /&gt;
### 2 cde&lt;br /&gt;
### 3 regexp&lt;br /&gt;
### 4 fgh&lt;br /&gt;
### 5 xyz&lt;br /&gt;
###命令执行到regexp前一行，引号里边的命令不执行,只执行h命令得到结果&lt;br /&gt;
### command parttern space holdspace output&lt;br /&gt;
### 执行到前一行 2cde 2cde&lt;br /&gt;
### 执行到regexp行 &amp;#8220;=&amp;#8221; 3regexp 3&lt;br /&gt;
### &amp;#8220;x&amp;#8221; 2cde 3regexp&lt;br /&gt;
### &amp;#8220;1!p&amp;#8221; 2cde 3regexp 2cde&lt;br /&gt;
### &amp;#8220;g&amp;#8221; 3regexp 3regexp&lt;br /&gt;
### &amp;#8220;$N&amp;#8221; 3regexp ; 4fgh 3regexp&lt;br /&gt;
### &amp;#8220;p&amp;#8221; 3regexp ; 4fgh 3regexp 3regexp&lt;br /&gt;
### 4fgh&lt;br /&gt;
### &amp;#8220;D&amp;#8221; 4fgh 3regexp&lt;br /&gt;
### &amp;#8220;h&amp;#8221; 4fgh 4fgh&lt;br /&gt;
###&lt;br /&gt;
### 看一下最右边的输出结果，还不错吧！&lt;/p&gt;
&lt;p&gt;# grep for AAA and BBB and CCC (n any order)&lt;br /&gt;
#查找&amp;#8221;AAA&amp;#8221;和&amp;#8221;BBB&amp;#8221;和&amp;#8221;CCC&amp;#8221;.(任意顺序)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/AAA/!d; /BBB/!d; /CCC/!d&amp;#8217;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# grep for AAA and BBB and CCC (n that order)&lt;br /&gt;
# 查找&amp;#8221;AAA&amp;#8221;和&amp;#8221;BBB&amp;#8221;和&amp;#8221;CCC&amp;#8221;.(一定顺序)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/AAA.*BBB.*CCC/!d&amp;#8217;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# grep for AAA or BBB or CCC (emulates &amp;#8220;egrep&amp;#8221;)&lt;br /&gt;
#查找&amp;#8221;AAA&amp;#8221;或&amp;#8221;BBB&amp;#8221;或&amp;#8221;CCC&amp;#8221;.(任意顺序)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -e &amp;#8216;/AAA/b&amp;#8217; -e &amp;#8216;/BBB/b&amp;#8217; -e &amp;#8216;/CCC/b&amp;#8217; -e d # most seds&lt;br /&gt;
gsed &amp;#8216;/AAA\|BBB\|CCC/!d&amp;#8217; # GNU sed only&lt;/span&gt;&lt;br /&gt;
###上边三个没什么说的，就是查找功能呗．&lt;/p&gt;
&lt;p&gt;# print paragraph if it contains AAA (blank lines separate paragraphs)&lt;br /&gt;
# HHsed v1.5 must insert a &amp;#8216;G;&amp;#8217; after &amp;#8216;x;&amp;#8217; in the next 3 scripts below&lt;br /&gt;
#如果某段包含&amp;#8221;AAA&amp;#8221;,则打印这一段。(空行用来分隔段落)&lt;br /&gt;
#HHsed v1.5必须在&amp;#8217;x;&amp;#8217;之后插入一个&amp;#8217;G;&amp;#8217;&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -e &amp;#8216;/./{H;$!d;}&amp;#8217; -e &amp;#8216;x;/AAA/!d;&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###前边一部分命令用保留空间来存储整个段落内容，后边一个命令用来查找&lt;/p&gt;
&lt;p&gt;# print paragraph if it contains AAA and BBB and CCC (n any order)&lt;br /&gt;
#如果某段包含&amp;#8221;AAA&amp;#8221;和&amp;#8221;BBB&amp;#8221;和&amp;#8221;CCC&amp;#8221;,则打印这一段&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -e &amp;#8216;/./{H;$!d;}&amp;#8217; -e &amp;#8216;x;/AAA/!d;/BBB/!d;/CCC/!d&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###同上&lt;/p&gt;
&lt;p&gt;# print paragraph if it contains AAA or BBB or CCC&lt;br /&gt;
# 如果某段包含&amp;#8221;AAA&amp;#8221;或&amp;#8221;BBB&amp;#8221;或&amp;#8221;CCC&amp;#8221;,则打印这一段&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -e &amp;#8216;/./{H;$!d;}&amp;#8217; -e &amp;#8216;x;/AAA/b&amp;#8217; -e &amp;#8216;/BBB/b&amp;#8217; -e &amp;#8216;/CCC/b&amp;#8217; -e d&lt;br /&gt;
gsed &amp;#8216;/./{H;$!d;};x;/AAA\|BBB\|CCC/b;d&amp;#8217; # GNU sed only&lt;/span&gt;&lt;br /&gt;
###同上&lt;/p&gt;
&lt;p&gt;# print only lines of 65 characters or longer&lt;br /&gt;
#仅打印长于65个字符的行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -n &amp;#8216;/^.\{65\}/p&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###这也没什么好说的，正则表达式的运用．&lt;/p&gt;
&lt;p&gt;# print only lines of less than 65 characters&lt;br /&gt;
#仅打印少于65个字符的行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -n &amp;#8216;/^.\{65\}/!p&amp;#8217; # method 1, corresponds to above&lt;br /&gt;
sed &amp;#8216;/^.\{65\}/d&amp;#8217; # method 2, simpler syntax&lt;/span&gt;&lt;br /&gt;
###又没啥吧&lt;/p&gt;
&lt;p&gt;# print section of file from regular expression to end of file&lt;br /&gt;
#打印从字符&amp;#8221;regexp&amp;#8221;开始到文件结束的部分&lt;br /&gt;
sed -n &amp;#8216;/regexp/,$p&amp;#8217;&lt;br /&gt;
###还没啥，注意&amp;#8221;,&amp;#8221;的作用是选择行的范围，从包含regexp的行到最后一行&lt;/p&gt;
&lt;p&gt;# print section of file based on line numbers (ines 8-12, inclusive)&lt;br /&gt;
#根据行号来打印文件的一部分(-12行，包括在内)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -n &amp;#8216;8,12p&amp;#8217; # method 1&lt;br /&gt;
sed &amp;#8216;8,12!d&amp;#8217; # method 2&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# print line number 52&lt;br /&gt;
#打印第52行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -n &amp;#8216;52p&amp;#8217; # method 1&lt;br /&gt;
sed &amp;#8216;52!d&amp;#8217; # method 2&lt;br /&gt;
sed &amp;#8216;52q;d&amp;#8217; # method 3, efficient on large files&lt;/span&gt;&lt;br /&gt;
###仅注意第三种方法效率比较高就行了&lt;/p&gt;
&lt;p&gt;# beginning at line 3, print every 7th line&lt;br /&gt;
#从第三行开始，每7行打印一行&lt;br /&gt;
gsed -n &amp;#8216;3~7p&amp;#8217; # GNU sed only&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -n &amp;#8216;3,${p;n;n;n;n;n;n;}&amp;#8217; # other seds&lt;/span&gt;&lt;br /&gt;
###好像很容易理解了吧&lt;/p&gt;
&lt;p&gt;# print section of file between two regular expressions (nclusive)&lt;br /&gt;
#打印文件中指定字符之间的部分(含字符在内)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -n &amp;#8216;/Iowa/,/Montana/p&amp;#8217; # case sensitive&lt;/span&gt;&lt;br /&gt;
###现在简单了吧．：）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;SELECTIVE DELETION OF CERTAIN LINES:&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;# print all of file EXCEPT section between 2 regular expressions&lt;br /&gt;
#打印除指定字符之间部分之外的全文&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/Iowa/,/Montana/d&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###与上边相似的简单&lt;/p&gt;
&lt;p&gt;# delete duplicate, consecutive lines from a file (emulates &amp;#8220;uniq&amp;#8221;)&lt;br /&gt;
# First line in a set of duplicate lines is kept, rest are deleted.&lt;br /&gt;
#删除文件中重复的连续的行(似于&amp;#8221;uniq&amp;#8221;命令)&lt;br /&gt;
#重复行中第一行保留，其他删除&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;$!N; /^\(.*\)\n\1$/!P; D&amp;#8217; 　&lt;br /&gt;
&lt;/span&gt;###如果不是最后一行，就把下一行附加在模式空间，然后进行查找操作&lt;br /&gt;
###&amp;#8221;^&amp;#8221;和&amp;#8221;$&amp;#8221;中间的内容如果有重复就匹配成功．如果匹配不成功就用P打印&lt;br /&gt;
###第一行．　然后删除第一行．&lt;/p&gt;
&lt;p&gt;# delete duplicate, nonconsecutive lines from a file. Beware not to&lt;br /&gt;
# overflow the buffer size of the hold space, or else use GNU sed.&lt;br /&gt;
#删除文件中重复的，但不连续的行。注意不要溢出保留空间的缓冲器的大小，&lt;br /&gt;
#否则使用GNU sed.&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -n &amp;#8216;G; s/\n/&amp;amp;&amp;amp;/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###在我的linux环境执行不了，出错是sed: -e expression #1, char 34:&lt;br /&gt;
###Invalid range end.是不是所谓的溢出保留空间的大小了呢？我也不得而知．&lt;br /&gt;
###大家补充吧．!!?????????????????&lt;/p&gt;
&lt;p&gt;# delete the first 10 lines of a file&lt;br /&gt;
#删除一个文件中前10行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;1,10d&amp;#8217;&lt;/span&gt;&lt;br /&gt;
# delete the last line of a file&lt;br /&gt;
#删除一个文件中最后1行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;$d&amp;#8217;&lt;br /&gt;
&lt;/span&gt;###与上边一个都是查找删除&lt;/p&gt;
&lt;p&gt;# delete the last 2 lines of a file&lt;br /&gt;
#删除一个文件中最后2行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;N;$!P;$!D;$d&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###如果理解了sed &amp;#8216;$!N;$!D&amp;#8217;是如何工作的，这句话也不在话下吧！&lt;/p&gt;
&lt;p&gt;# delete the last 10 lines of a file&lt;br /&gt;
#删除一个文件中后10行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -e :a -e &amp;#8216;$d;N;2,10ba&amp;#8217; -e &amp;#8216;P;D&amp;#8217; # method 1&lt;br /&gt;
sed -n -e :a -e &amp;#8216;1,10!{P;N;D;};N;ba&amp;#8217; # method 2&lt;/span&gt;&lt;br /&gt;
###和打印后10行相似．什么？打印后10那个没看懂? /shakehand ：）&lt;/p&gt;
&lt;p&gt;# delete every 8th line&lt;br /&gt;
# 每8行删除1行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;gsed &amp;#8216;0~8d&amp;#8217; # GNU sed only&lt;br /&gt;
sed &amp;#8216;n;n;n;n;n;n;n;d;&amp;#8217; # other seds&lt;/span&gt;&lt;br /&gt;
###没说的!&lt;/p&gt;
&lt;p&gt;# delete ALL blank lines from a file (ame as &amp;#8220;grep &amp;#8216;.&amp;#8217; &amp;#8220;)&lt;br /&gt;
#删除文件所有空白行(似于&amp;#8221;grep &amp;#8216;.&amp;#8217; &amp;#8220;)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/^$/d&amp;#8217; # method 1&lt;br /&gt;
sed &amp;#8216;/./!d&amp;#8217; # method 2&lt;/span&gt;&lt;br /&gt;
###这两句就是告诉我们1.无内容的删除,2.有内容的保留 : )&lt;/p&gt;
&lt;p&gt;# delete all CONSECUTIVE blank lines from file except the first; also&lt;br /&gt;
# deletes all blank lines from top and end of file (emulates &amp;#8220;cat -s&amp;#8221;)&lt;br /&gt;
#删除文件中除一行空白行之外的所有连续空白行，也同时删除所有从头到尾的所&lt;br /&gt;
#有空白行(似于&amp;#8221;cat -s&amp;#8221;)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/./,/^$/!d&amp;#8217; # method 1, allows 0 blanks at top, 1 at EOF&lt;br /&gt;
&lt;/span&gt;#方法1不允许文件顶部有空行，文件尾部可以&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/^$/N;/\n$/D&amp;#8217; # method 2, allows 1 blank at top, 0 at EOF&lt;/span&gt;&lt;br /&gt;
#方法2不允许文件尾部有空行，文件顶部可以&lt;br /&gt;
###两个先选择，后删除命令.不多说了.&lt;/p&gt;
&lt;p&gt;# delete all CONSECUTIVE blank lines from file except the first 2:&lt;br /&gt;
#删除文件中连续空行中除前两行空白行之外的所有空白行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/^$/N;/\n$/N;//D&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###跟上边的命令相似，多了一步而已.&lt;/p&gt;
&lt;p&gt;# delete all leading blank lines at top of file&lt;br /&gt;
#删除文件开头部分中的所有空白行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/./,$!d&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###从有字符开始的行直到最后一行保留，其他删除.&lt;/p&gt;
&lt;p&gt;# delete all trailing blank lines at end of file&lt;br /&gt;
#删除文件结尾部分中的所有空白行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -e :a -e &amp;#8216;/^\n*$/{$d;N;ba&amp;#8217; -e &amp;#8216;}&amp;#8217; # works on all seds&lt;br /&gt;
sed -e :a -e &amp;#8216;/^\n*$/N;/\n$/ba&amp;#8217; # ditto, except for gsed 3.02*&lt;/span&gt;&lt;br /&gt;
###不行了要死了，还是高手说吧，我再看下去会疯的！&lt;/p&gt;
&lt;p&gt;# delete the last line of each paragraph&lt;br /&gt;
#删除每个段落中最后1行&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -n &amp;#8216;/^$/{p;h;};/./{x;/./p;}&amp;#8217;&lt;/span&gt;&lt;br /&gt;
###应该是假设段落间用空行分隔&lt;br /&gt;
###命令执行时，如果不是空行那么交换模式空间和保留空间，如果交换后&lt;br /&gt;
###模式空间不为空，则打印模式空间中内容；如果是空行，那么打印模式空间&lt;br /&gt;
###间中的内容,也就是打印空行&amp;#8230;以此类推,出现结果.&lt;/p&gt;
&lt;p&gt;###终于完了，下边的特殊应用没有加注，随便翻译了一下，可能不够准确，大家参考一下吧. :em11:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;SPECIAL APPLICATIONS:&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;# remove nroff overstrikes (char, backspace)from man pages. The &amp;#8216;echo&amp;#8217;&lt;br /&gt;
# command may need an -e switch if you use Unix System V or bash shell.&lt;br /&gt;
# 从man page页里删除所有overstrikes(字符,backspace).如果使用unix系统v&lt;br /&gt;
#或者bash shell,echo命令可能需要-e参数.&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8220;s/.`echo \\\b`//g&amp;#8221; # double quotes required for Unix environment&lt;/span&gt;&lt;br /&gt;
#unix环境下需要双引号&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/.^H//g&amp;#8217; # in bash/tcsh, press Ctrl-V and then Ctrl-H&lt;/span&gt;&lt;br /&gt;
#在bash/tcsh中，按Ctrl-V然后按Ctrl-H&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/.\x08//g&amp;#8217; # hex expression for sed v1.5&lt;/span&gt;&lt;br /&gt;
#sed v1.5中的hex表达式&lt;/p&gt;
&lt;p&gt;# get Usenet/e-mail message header&lt;br /&gt;
# 获得新闻组/e-mail信息的标题部分&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/^$/q&amp;#8217; # deletes everything after first blank line&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# get Usenet/e-mail message body&lt;br /&gt;
#获得新闻组/e-mail信息的主体部分&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;1,/^$/d&amp;#8217; # deletes everything up to first blank line&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# get Subject header, but remove initial &amp;#8220;Subject: &amp;#8221; portion&lt;br /&gt;
#获得题目的标题，但是删去开始的&amp;#8221;Subject: &amp;#8220;部分&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/^Subject: */!d; s///;q&amp;#8217;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# get return address header&lt;br /&gt;
#获得返回的地址标题()&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/^Reply-To:/q; /^From:/h; /./d;g;q&amp;#8217;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# parse out the address proper. Pulls out the e-mail address by itself&lt;br /&gt;
# from the 1-line return address header (ee preceding script)&lt;br /&gt;
#正确解析地址。把email地址从一行中单独提出来并返回地址头()&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/ *(*)/; s/&amp;gt;.*//; s/.*[:&amp;lt;] *//&amp;#8217;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# add a leading angle bracket and space to each line (uote a message)&lt;br /&gt;
#给每行增加的尖括号和空格()信息被引用)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/^/&amp;gt; /&amp;#8217;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# delete leading angle bracket &amp;amp; space from each line (nquote a message)&lt;br /&gt;
#删除每行的尖括号和空格()信息不被引用)&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8217;s/^&amp;gt; //&amp;#8217;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# remove most HTML tags (ccommodates multiple-line tags)&lt;br /&gt;
#删去大部分HTML标签(供多行标签))&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed -e :a -e &amp;#8217;s/&amp;lt;[^&amp;gt;]*&amp;gt;//g;/&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# extract multi-part un(?)encoded binaries, removing extraneous header&lt;br /&gt;
# info, so that only the uuencoded portion remains. Files passed to&lt;br /&gt;
# sed must be passed in the proper order. Version 1 can be entered&lt;br /&gt;
# from the command line; version 2 can be made into an executable&lt;br /&gt;
# Unix shell script. (odified from a script by Rahul Dhesi.)&lt;br /&gt;
#抽取多部分未编码的二进制字节,删除无关的头信息,使得只保留未编码的部分.&lt;br /&gt;
#文件传送给sed必须保持正确的顺序。第一版本可以用于命令行的执行，第二版本&lt;br /&gt;
#可以制作成一个可执行的unix shell脚本&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;sed &amp;#8216;/^end/,/^begin/d&amp;#8217; file1 file2 &amp;#8230; fileX | uudecode # vers. 1&lt;br /&gt;
sed &amp;#8216;/^end/,/^begin/d&amp;#8217; &amp;#8220;$@&amp;#8221; | uudecode # vers. 2&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# zip up each .TXT file individually, deleting the source file and&lt;br /&gt;
# setting the name of each .ZIP file to the basename of the .TXT file&lt;br /&gt;
# (under DOS: the &amp;#8220;dir /b&amp;#8221; switch returns bare filenames in all caps)&lt;br /&gt;
#独立的压缩每个txt文件，删除原文件并且根绝原文本文件设置每个zip文件名。&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;echo @echo off &amp;gt;zipup.bat&lt;br /&gt;
dir /b *.txt | sed &amp;#8220;s/^\(*\).TXT/pkzip -mo \1 \1.TXT/&amp;#8221; &amp;gt;&amp;gt;zipup.bat&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=162689c78c544e046eb12a8d285c01fd&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=162689c78c544e046eb12a8d285c01fd&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=28831a128c071f33b7395b14fec20c74&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=28831a128c071f33b7395b14fec20c74&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=30f207d1bf06ba3697f2fe96d6fae1dc&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=30f207d1bf06ba3697f2fe96d6fae1dc&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=236ccaba29a1d3957e15d7dba5d99fa3&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=236ccaba29a1d3957e15d7dba5d99fa3&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=ed90ba281978f07bedf13990b8dd677c&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=ed90ba281978f07bedf13990b8dd677c&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=84d1752e4133935d0051f443c126762e&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=84d1752e4133935d0051f443c126762e&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=3efbdc1bcc80a2afd40f1473d0f6c000&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=3efbdc1bcc80a2afd40f1473d0f6c000&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=9a8fd67b1fe5a3c7b744455c4adc8e71&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=9a8fd67b1fe5a3c7b744455c4adc8e71&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=a2d56e240174f816798a9ce47290be6e&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=a2d56e240174f816798a9ce47290be6e&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lazysa.com/2009/08/716.html/feed</wfw:commentRss><description>sed用法实例&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=162689c78c544e046eb12a8d285c01fd&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=162689c78c544e046eb12a8d285c01fd&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=28831a128c071f33b7395b14fec20c74&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=28831a128c071f33b7395b14fec20c74&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=30f207d1bf06ba3697f2fe96d6fae1dc&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=30f207d1bf06ba3697f2fe96d6fae1dc&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=236ccaba29a1d3957e15d7dba5d99fa3&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=236ccaba29a1d3957e15d7dba5d99fa3&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=ed90ba281978f07bedf13990b8dd677c&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=ed90ba281978f07bedf13990b8dd677c&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=84d1752e4133935d0051f443c126762e&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=84d1752e4133935d0051f443c126762e&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=3efbdc1bcc80a2afd40f1473d0f6c000&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=3efbdc1bcc80a2afd40f1473d0f6c000&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=9a8fd67b1fe5a3c7b744455c4adc8e71&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=9a8fd67b1fe5a3c7b744455c4adc8e71&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=a2d56e240174f816798a9ce47290be6e&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=a2d56e240174f816798a9ce47290be6e&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>sed</category><category>Linux</category><category>推荐</category><category>Shell</category><category>sed命令</category><pubDate>Wed, 12 Aug 2009 11:40:36 +0800</pubDate><author>lazysa</author><comments>http://www.lazysa.com/2009/08/716.html#comments</comments><guid isPermaLink="false">http://www.lazysa.com/?p=716</guid><dc:creator>lazysa</dc:creator></item><item><title>常用正则表达式</title><link>http://www.lazysa.com/2009/08/713.html</link><content:encoded>&lt;p&gt;正则表达式用于字符串处理、表单验证等场合，实用高效。现将一些常用的表达式收集于此，以备不时之需。&lt;/p&gt;
&lt;p&gt;匹配中文字符的正则表达式： [\u4e00-\u9fa5]&lt;br /&gt;
评注：匹配中文还真是个头疼的事，有了这个表达式就好办了&lt;br /&gt;
匹配双字节字符(包括汉字在内)：[^\x00-\xff]&lt;br /&gt;
评注：可以用来计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）&lt;br /&gt;
匹配空白行的正则表达式：\n\s*\r&lt;br /&gt;
评注：可以用来删除空白行&lt;br /&gt;
匹配HTML标记的正则表达式：&lt;(\S*?)[^&gt;]*&gt;.*?&lt;/\1&gt;|&lt;.*? /&gt;&lt;br /&gt;
评注：网上流传的版本太糟糕，上面这个也仅仅能匹配部分，对于复杂的嵌套标记依旧无能为力&lt;br /&gt;
匹配首尾空白字符的正则表达式：^\s*|\s*$&lt;br /&gt;
评注：可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等)，非常有用的表达式&lt;br /&gt;
匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*&lt;br /&gt;
评注：表单验证时很实用&lt;br /&gt;
匹配网址URL的正则表达式：[a-zA-z]+://[^\s]*&lt;br /&gt;
评注：网上流传的版本功能很有限，上面这个基本可以满足需求&lt;br /&gt;
匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：^[a-zA-Z][a-zA-Z0-9_]{4,15}$&lt;br /&gt;
评注：表单验证时很实用&lt;br /&gt;
匹配国内电话号码：\d{3}-\d{8}|\d{4}-\d{7}&lt;br /&gt;
评注：匹配形式如 0511-4405222 或 021-87888822&lt;br /&gt;
匹配腾讯QQ号：[1-9][0-9]{4,}&lt;br /&gt;
评注：腾讯QQ号从10000开始&lt;br /&gt;
匹配中国邮政编码：[1-9]\d{5}(?!\d)&lt;br /&gt;
评注：中国邮政编码为6位数字&lt;br /&gt;
匹配身份证：\d{15}|\d{18}&lt;br /&gt;
评注：中国的身份证为15位或18位&lt;br /&gt;
匹配ip地址：\d+\.\d+\.\d+\.\d+&lt;br /&gt;
评注：提取ip地址时有用&lt;br /&gt;
匹配特定数字：&lt;br /&gt;
^[1-9]\d*$　 　 //匹配正整数&lt;br /&gt;
^-[1-9]\d*$ 　 //匹配负整数&lt;br /&gt;
^-?[1-9]\d*$　　 //匹配整数&lt;br /&gt;
^[1-9]\d*|0$　 //匹配非负整数（正整数 + 0）&lt;br /&gt;
^-[1-9]\d*|0$　　 //匹配非正整数（负整数 + 0）&lt;br /&gt;
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$　　 //匹配正浮点数&lt;br /&gt;
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$　 //匹配负浮点数&lt;br /&gt;
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$　 //匹配浮点数&lt;br /&gt;
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$　　 //匹配非负浮点数（正浮点数 + 0）&lt;br /&gt;
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$　　//匹配非正浮点数（负浮点数 + 0）&lt;br /&gt;
评注：处理大量数据时有用，具体应用时注意修正&lt;br /&gt;
匹配特定字符串：&lt;br /&gt;
^[A-Za-z]+$　　//匹配由26个英文字母组成的字符串&lt;br /&gt;
^[A-Z]+$　　//匹配由26个英文字母的大写组成的字符串&lt;br /&gt;
^[a-z]+$　　//匹配由26个英文字母的小写组成的字符串&lt;br /&gt;
^[A-Za-z0-9]+$　　//匹配由数字和26个英文字母组成的字符串&lt;br /&gt;
^\w+$　　//匹配由数字、26个英文字母或者下划线组成的字符串&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=309c6ca674dee09a7476b91f1f0c1779&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=309c6ca674dee09a7476b91f1f0c1779&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=d74236bbf819e7771d4c65b6c176c2f2&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=d74236bbf819e7771d4c65b6c176c2f2&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=e5f3bb9c0dee42be23a307a63ec99334&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=e5f3bb9c0dee42be23a307a63ec99334&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=8574b872255944729c2f49d01a3b1bef&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=8574b872255944729c2f49d01a3b1bef&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=a101eec845213ea5b9b27212b096f817&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=a101eec845213ea5b9b27212b096f817&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=9c8048785788af1d3a4bc68ce62191be&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=9c8048785788af1d3a4bc68ce62191be&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=a4fbdeadae29a39fa9cac728c1115bd8&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=a4fbdeadae29a39fa9cac728c1115bd8&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=50c798911f5f056ee9d0e40fe5416e3f&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=50c798911f5f056ee9d0e40fe5416e3f&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=180644c3bfe53de6346596cc8c4e130b&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=180644c3bfe53de6346596cc8c4e130b&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lazysa.com/2009/08/713.html/feed</wfw:commentRss><description>常用正则表达式&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=309c6ca674dee09a7476b91f1f0c1779&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=309c6ca674dee09a7476b91f1f0c1779&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=d74236bbf819e7771d4c65b6c176c2f2&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=d74236bbf819e7771d4c65b6c176c2f2&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=e5f3bb9c0dee42be23a307a63ec99334&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=e5f3bb9c0dee42be23a307a63ec99334&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=8574b872255944729c2f49d01a3b1bef&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=8574b872255944729c2f49d01a3b1bef&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=a101eec845213ea5b9b27212b096f817&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=a101eec845213ea5b9b27212b096f817&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=9c8048785788af1d3a4bc68ce62191be&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=9c8048785788af1d3a4bc68ce62191be&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=a4fbdeadae29a39fa9cac728c1115bd8&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=a4fbdeadae29a39fa9cac728c1115bd8&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=50c798911f5f056ee9d0e40fe5416e3f&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=50c798911f5f056ee9d0e40fe5416e3f&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=180644c3bfe53de6346596cc8c4e130b&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=180644c3bfe53de6346596cc8c4e130b&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Linux</category><category>正则表达式</category><pubDate>Fri, 07 Aug 2009 14:42:51 +0800</pubDate><author>lazysa</author><comments>http://www.lazysa.com/2009/08/713.html#comments</comments><guid isPermaLink="false">http://www.lazysa.com/?p=713</guid><dc:creator>lazysa</dc:creator></item><item><title>内核转储（core dump）介绍与分析</title><link>http://www.lazysa.com/2009/08/708.html</link><content:encoded>&lt;p&gt;&lt;strong&gt;内核转储core dump&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;何谓 core？&lt;/strong&gt;&lt;br /&gt;
在使用半导体作为内存的材料前，人类是利用线圈当作内存的材料（发明 者为王安），线圈就叫作 core ，用线圈做的内存就叫作 core memory。如今 ，半导体工业澎勃发展，已经没有人用 core memory 了，不过，在许多情况下， 人们还是把记忆体叫作 core 。 &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;何谓 core dump？&lt;/strong&gt;&lt;br /&gt;
我们在开发（或使用）一个程序时，最怕的就是程序莫明其妙地当掉。虽然系 统没事，但我们下次仍可能遇到相同的问题。于是这时操作系统就会把程序当掉 时的内存内容 dump 出来（现在通常是写在一个叫 core 的 file 里面），让 我们或是 debugger 做为参考。这个动作就叫作 core dump。 &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;为何会发生 core dump？&lt;/strong&gt;&lt;br /&gt;
前面说过，在程序当掉时出错。在 C/C++语言中，最常发生错误的地方就是指 针有问题。您可以利用 core 文件和 debugger 把错误找出来（要怎麽在 debugger 中使用 core 文件？man 一下 gdb 吧！）。 &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我可以把 core 文件删掉吗？&lt;/strong&gt;&lt;br /&gt;
如果你不会、不能、不需要修改程序，那就放心地把它删除了吧！ &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;要怎麽才不会让 core 文件出现？&lt;/strong&gt;&lt;br /&gt;
如果用的是tcsh的话, 以试著在 .tcshrc 里加一行：&lt;br /&gt;
limit coredumpsize 0&lt;br /&gt;
如果用的是bash的话, 在/etc/profile里加上(或者修改)一条:&lt;br /&gt;
ulimit -c 0&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;有哪些core dump？&lt;/strong&gt;&lt;br /&gt;
常见的coredump有：&lt;br /&gt;
netdump   &amp;#8212;- 网络崩溃引起的内核转储&lt;br /&gt;
kdump      &amp;#8212;- 内核意外崩溃引起的内核转储&lt;br /&gt;
diskdump   &amp;#8212;- 硬盘意外崩溃引起的内核转储&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一个实例, 可以让你看出 core 最好用的地方 &lt;img src='http://www.lazysa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/strong&gt;&lt;br /&gt;
gdb -c core, 进去后打 where, 就可以 show 出你是在程序哪一行当掉的, 还有在当掉时在哪个 function 里, 这个 function 是被哪个 function 所 call 的, 而这个 function 又是被哪个 function 所 call 的&amp;#8230;. 一直到 main() &lt;/p&gt;
&lt;p&gt;由这个信息, 可以找出五六成的 bug&amp;#8230;&amp;#8230;.. 屡试不爽 &lt;/p&gt;
&lt;p&gt;但, 先决条件, 当你在 compile 时必须把 debug information 的选项打开 不然, 就会出现一大堆你看不懂的东西，而不是你喜欢的源程序。 &lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=cecef596708b0de777839f9b90b41398&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=cecef596708b0de777839f9b90b41398&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=0fbea40064d035373c50f9bed17ff618&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=0fbea40064d035373c50f9bed17ff618&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=e8d6624f39bce584284728224d6bda9e&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=e8d6624f39bce584284728224d6bda9e&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=2000a73088b9ddfe3e6d36f6da6b7fbf&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=2000a73088b9ddfe3e6d36f6da6b7fbf&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=bc8112810039f7858dc7c20fbc505ad5&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=bc8112810039f7858dc7c20fbc505ad5&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=12906b8c5510d1c66bafe13e2a8d05ac&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=12906b8c5510d1c66bafe13e2a8d05ac&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=d2c0ea0d94ebb1ab009156c174eb2f1c&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=d2c0ea0d94ebb1ab009156c174eb2f1c&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=e41c4146c32fecb2fad8791b82e73d54&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=e41c4146c32fecb2fad8791b82e73d54&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=c687d05539666154f9f4474d63c6a638&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=c687d05539666154f9f4474d63c6a638&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lazysa.com/2009/08/708.html/feed</wfw:commentRss><description>内核转储（core dump）介绍与分析&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=cecef596708b0de777839f9b90b41398&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=cecef596708b0de777839f9b90b41398&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=0fbea40064d035373c50f9bed17ff618&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=0fbea40064d035373c50f9bed17ff618&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=e8d6624f39bce584284728224d6bda9e&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=e8d6624f39bce584284728224d6bda9e&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=2000a73088b9ddfe3e6d36f6da6b7fbf&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=2000a73088b9ddfe3e6d36f6da6b7fbf&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=bc8112810039f7858dc7c20fbc505ad5&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=bc8112810039f7858dc7c20fbc505ad5&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=12906b8c5510d1c66bafe13e2a8d05ac&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=12906b8c5510d1c66bafe13e2a8d05ac&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=d2c0ea0d94ebb1ab009156c174eb2f1c&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=d2c0ea0d94ebb1ab009156c174eb2f1c&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=e41c4146c32fecb2fad8791b82e73d54&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=e41c4146c32fecb2fad8791b82e73d54&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=c687d05539666154f9f4474d63c6a638&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=c687d05539666154f9f4474d63c6a638&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Linux</category><category>kdump</category><category>netdump</category><category>core dump</category><category>diskdump</category><category>内核转储</category><pubDate>Thu, 06 Aug 2009 09:44:57 +0800</pubDate><author>lazysa</author><comments>http://www.lazysa.com/2009/08/708.html#comments</comments><guid isPermaLink="false">http://www.lazysa.com/?p=708</guid><dc:creator>lazysa</dc:creator></item><item><title>内核转储（core dump）kdump</title><link>http://www.lazysa.com/2009/08/703.html</link><content:encoded>&lt;p&gt;&lt;strong&gt;kdump&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;实验环境：&lt;/strong&gt;&lt;br /&gt;
client OS: Red Hat Enterprise Linux 5 update 2&lt;br /&gt;
client IP: 10.66.0.157&lt;br /&gt;
server OS: Red Hat Enterprise Linux 4 update 7&lt;br /&gt;
server IP: 10.66.0.84&lt;br /&gt;
kdump属于kexec-tools-1.102pre-21.el5这个包。一般装系统都有装上。&lt;br /&gt;
kdump支持N种方式存储内存数据，包括裸设备，文件系统，nfs，ssh。并且能设定dump&lt;br /&gt;
前和dump后运行脚本以及执行其他动作。正所谓很好很强大。&lt;br /&gt;
kdump的dump机制是：预先生成一个crashkernel，在内核crash的时候，激活这个&lt;br /&gt;
crashkernel，用这个crashkernel载入的小型系统dump处于crash状态的内核。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;实验步骤：&lt;/strong&gt;&lt;br /&gt;
这次我会配置kdump把内存数据scp到备份服务器上。&lt;br /&gt;
在client上：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;安装kdump&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;[root@dhcp-0-157 ~]# cat /etc/redhat-release&lt;br /&gt;
Red Hat Enterprise Linux Server release 5.2 (Tikanga)&lt;br /&gt;
[root@dhcp-0-157 ~]# cd /misc/cd/Server&lt;br /&gt;
[root@dhcp-0-157 Server]# rpm -ivh busybox-1.2.0-4.el5.i386.rpm&lt;br /&gt;
warning: busybox-1.2.0-4.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID&lt;br /&gt;
37017186&lt;br /&gt;
Preparing&amp;#8230; ########################################### [100%]&lt;br /&gt;
1:busybox ########################################### [100%]&lt;br /&gt;
[root@dhcp-0-157 Server]# rpm -ivh kexec-tools-1.102pre-21.el5.i386.rpm&lt;br /&gt;
warning: kexec-tools-1.102pre-21.el5.i386.rpm: Header V3 DSA signature: NOKEY,&lt;br /&gt;
key ID 37017186&lt;br /&gt;
Preparing&amp;#8230; ########################################### [100%]&lt;br /&gt;
1:kexec-tools ########################################### [100%]&lt;br /&gt;
[root@dhcp-0-157 Server]#&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;配置kdump&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;[root@dhcp-0-157 ~]# vim /etc/kdump.conf&lt;br /&gt;
net root@10.66.0.84&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;对kernel开启kdump支持&lt;br /&gt;
&lt;code&gt;[root@dhcp-0-157 ~]# vim /boot/grub/grub.conf&lt;/code&gt;&lt;br /&gt;
在kernel选项上添加crashkernel参数。&lt;br /&gt;
参数格式是：&lt;br /&gt;
crashkernel=nn[KMG]@ss[KMG]&lt;br /&gt;
nn表示要为crashkernel预留多少内存&lt;br /&gt;
ss表示为crashkernel预留内存的起始位置&lt;br /&gt;
&lt;code&gt;default=0&lt;br /&gt;
timeout=5&lt;br /&gt;
splashimage=(hd0,0)/grub/splash.xpm.gz&lt;br /&gt;
hiddenmenu&lt;br /&gt;
title Red Hat Enterprise Linux Server (2.6.18-92.el5)&lt;br /&gt;
root (hd0,0)&lt;br /&gt;
kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/ crashkernel=256M@16M&lt;br /&gt;
initrd /initrd-2.6.18-92.el5.img&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;重启电脑使新参数生效。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;然后启用kdump服务&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;[root@dhcp-0-157 ~]# service kdump&lt;br /&gt;
Usage: /etc/init.d/kdump {start|stop|status|restart|propagate}&lt;br /&gt;
[root@dhcp-0-157 ~]# service kdump propagate&lt;br /&gt;
Generating new ssh keys&amp;#8230; done.&lt;br /&gt;
The authenticity of host &amp;#8216;10.66.0.84 (10.66.0.84)&amp;#8217; can&amp;#8217;t be established.&lt;br /&gt;
RSA key fingerprint is 31:c2:d8:b6:eb:2e:03:64:cd:ba:56:e9:49:6e:5d:6c.&lt;br /&gt;
Are you sure you want to continue connecting (yes/no)? yes&lt;br /&gt;
Warning: Permanently added &amp;#8216;10.66.0.84&amp;#8242; (RSA) to the list of known hosts.&lt;br /&gt;
root@10.66.0.84&amp;#8217;s password:&lt;br /&gt;
/root/.ssh/kdump_id_rsa.pub has been added to ~root/.ssh/authorized_keys2 on&lt;br /&gt;
10.66.0.84&lt;br /&gt;
[root@dhcp-0-157 ~]# service kdump restart&lt;br /&gt;
Stopping kdump:[ OK ]&lt;br /&gt;
No kdump initial ramdisk found.[WARNING]&lt;br /&gt;
Rebuilding /boot/initrd-2.6.18-92.el5kdump.img&lt;br /&gt;
Starting kdump:[ OK ]&lt;br /&gt;
[root@dhcp-0-157 ~]# chkconfig &amp;#8211;level 35 kdump on&lt;br /&gt;
[root@dhcp-0-157 ~]#&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;最后模拟crash：&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;[root@dhcp-0-157 ~]# echo 1 &gt; /proc/sys/kernel/sysrq&lt;br /&gt;
[root@dhcp-0-157 ~]# echo c &gt; /proc/sysrq-trigger&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;在server的/var/crash下可以看到由client转储过来的内核数据。&lt;br /&gt;
另外，kdump在完成内核转储后会自动重启。&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=c32ecb6e113bbd8b6fdd66e92aa115cb&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=c32ecb6e113bbd8b6fdd66e92aa115cb&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=ded0a94900e55d39c71dded3f047c915&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=ded0a94900e55d39c71dded3f047c915&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=5ee8052c074ac237a83b3f35c0f70b3f&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=5ee8052c074ac237a83b3f35c0f70b3f&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=115695ab4a82d94139bb45fb1feed6e8&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=115695ab4a82d94139bb45fb1feed6e8&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=0562636405c2bcd3243838420d14cba4&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=0562636405c2bcd3243838420d14cba4&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=256959c66fa4a91cfdd992f2c02f38a7&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=256959c66fa4a91cfdd992f2c02f38a7&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=63e708f28fa147fdc959eaf028cdb341&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=63e708f28fa147fdc959eaf028cdb341&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=f0d1bcab435425e604bd31e717c203b2&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=f0d1bcab435425e604bd31e717c203b2&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=ebbc0a362f815309743a9b6a1cc861c8&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=ebbc0a362f815309743a9b6a1cc861c8&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lazysa.com/2009/08/703.html/feed</wfw:commentRss><description>内核转储（core dump）kdump&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=c32ecb6e113bbd8b6fdd66e92aa115cb&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=c32ecb6e113bbd8b6fdd66e92aa115cb&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=ded0a94900e55d39c71dded3f047c915&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=ded0a94900e55d39c71dded3f047c915&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=5ee8052c074ac237a83b3f35c0f70b3f&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=5ee8052c074ac237a83b3f35c0f70b3f&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=115695ab4a82d94139bb45fb1feed6e8&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=115695ab4a82d94139bb45fb1feed6e8&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=0562636405c2bcd3243838420d14cba4&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=0562636405c2bcd3243838420d14cba4&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=256959c66fa4a91cfdd992f2c02f38a7&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=256959c66fa4a91cfdd992f2c02f38a7&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=63e708f28fa147fdc959eaf028cdb341&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=63e708f28fa147fdc959eaf028cdb341&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=f0d1bcab435425e604bd31e717c203b2&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=f0d1bcab435425e604bd31e717c203b2&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=ebbc0a362f815309743a9b6a1cc861c8&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=ebbc0a362f815309743a9b6a1cc861c8&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Linux</category><category>kdump</category><category>core dump</category><category>内核转储</category><pubDate>Thu, 06 Aug 2009 09:36:07 +0800</pubDate><author>lazysa</author><comments>http://www.lazysa.com/2009/08/703.html#comments</comments><guid isPermaLink="false">http://www.lazysa.com/?p=703</guid><dc:creator>lazysa</dc:creator></item><item><title>内核转储（core dump）diskdump</title><link>http://www.lazysa.com/2009/08/701.html</link><content:encoded>&lt;p&gt;&lt;strong&gt;diskdump&lt;/strong&gt;&lt;br /&gt;
diskdump在Red Hat Enterprise Linux 4 update 4之前需要一块单独的硬盘。&lt;br /&gt;
在Red Hat Enterprise Linux 4 update 4以及之后，只需要一块单独的磁盘分区。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;试验环境：&lt;/strong&gt;&lt;br /&gt;
Red Hat Enterprise Linux 4 update 7&lt;br /&gt;
原本采用Red Hat Enterprise Linux 5 update 2，但是发现diskdump在RHEL5以及更高版本上&lt;br /&gt;
被kdump所替代。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;试验步骤&lt;/strong&gt;&lt;br /&gt;
先划分一块分区给diskdump。&lt;br /&gt;
&lt;code&gt;[root@dhcp-0-084 ~]# fdisk /dev/sdb&lt;br /&gt;
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF&lt;br /&gt;
disklabel&lt;br /&gt;
Building a new DOS disklabel. Changes will remain in memory only,&lt;br /&gt;
until you decide to write them. After that, of course, the previous&lt;br /&gt;
content won&amp;#8217;t be recoverable.&lt;br /&gt;
Warning: invalid flag 0&amp;#215;0000 of partition table 4 will be corrected by w(rite)&lt;br /&gt;
Command (m for help): p&lt;br /&gt;
Disk /dev/sdb: 4294 MB, 4294967296 bytes&lt;br /&gt;
255 heads, 63 sectors/track, 522 cylinders&lt;br /&gt;
Units = cylinders of 16065 * 512 = 8225280 bytes&lt;br /&gt;
Device Boot Start End Blocks Id System&lt;br /&gt;
Command (m for help): n&lt;br /&gt;
Command action&lt;br /&gt;
e extended&lt;br /&gt;
p primary partition (1-4)&lt;br /&gt;
p&lt;br /&gt;
Partition number (1-4): 1&lt;br /&gt;
First cylinder (1-522, default 1):&lt;br /&gt;
Using default value 1&lt;br /&gt;
Last cylinder or +size or +sizeM or +sizeK (1-522, default 522):&lt;br /&gt;
Using default value 522&lt;br /&gt;
Command (m for help): w&lt;br /&gt;
The partition table has been altered!&lt;br /&gt;
Calling ioctl() to re-read partition table.&lt;br /&gt;
Syncing disks.&lt;br /&gt;
partprobe[root@dhcp-0-084 ~]# partprobe&lt;br /&gt;
Warning: Unable to open /dev/hdc read-write (Read-only file system). /dev/hdc&lt;br /&gt;
has been opened read-only.&lt;br /&gt;
No changes made to disk, exiting partprobe.&lt;br /&gt;
[root@dhcp-0-084 ~]#&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;我们用/dev/sdb1作为diskdump的数据临时存放点。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;编辑diskdump配置文件。&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;[root@dhcp-0-084 RPMS]# rpm -qa | grep diskdump&lt;br /&gt;
diskdumputils-1.4.1-5&lt;br /&gt;
[root@dhcp-0-084 RPMS]# vi /etc/sysconfig/diskdump&lt;br /&gt;
DEVICE=/dev/sdb1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;初始化并启动diskdump服务。&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;[root@dhcp-0-084 ~]# service diskdump initialformat&lt;br /&gt;
Formatting dump device:&lt;br /&gt;
Do you want to format /dev/sdb1 (yes/NO)? yes&lt;br /&gt;
/dev/sdb1: [100.0%]&lt;br /&gt;
[root@dhcp-0-084 ~]# service diskdump restart&lt;br /&gt;
Starting diskdump: [ OK ]&lt;br /&gt;
[root@dhcp-0-084 ~]# chkconfig &amp;#8211;level 35 diskdump on&lt;br /&gt;
[root@dhcp-0-084 ~]#&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;然后模拟死机。&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;[root@dhcp-0-084 RPMS]# echo 1 &gt; /proc/sys/kernel/sysrq&lt;br /&gt;
[root@dhcp-0-084 RPMS]# echo c &gt; /proc/sysrq-trigger&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;此时diskdump开始工作。把内存中的数据dump到/dev/sdb1中。&lt;br /&gt;
diskdump之后必须手动重启机器。&lt;br /&gt;
重启机器后，diskdump会把/dev/sdb1里面的数据拷到/var/crash文件夹下。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;检查diskdump数据。&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;[root@dhcp-0-084 ~]# cd /var/crash/&lt;br /&gt;
[root@dhcp-0-084 crash]# ll&lt;br /&gt;
total 12&lt;br /&gt;
drwx&amp;#8212;&amp;#8212; 2 root root 4096 Sep 22 19:52 127.0.0.1-2008-09-22-19:49&lt;br /&gt;
drwxr-xr-x 2 netdump netdump 4096 Mar 25 23:33 scripts&lt;br /&gt;
[root@dhcp-0-084 crash]# cd 127.0.0.1-2008-09-22-19\:49/&lt;br /&gt;
[root@dhcp-0-084 127.0.0.1-2008-09-22-19:49]# ll -h&lt;br /&gt;
total 86M&lt;br /&gt;
-rw&amp;#8212;&amp;#8212;- 1 root root 513M Sep 22 19:52 vmcore&lt;br /&gt;
[root@dhcp-0-084 127.0.0.1-2008-09-22-19:49]#&lt;/code&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=828f786480a4dcfc22abbb4797d51378&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=828f786480a4dcfc22abbb4797d51378&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=33a20db349b9b0689cc8f11c3eb728c5&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=33a20db349b9b0689cc8f11c3eb728c5&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=b3eb7a2038c70f3fda5fd1e6889ac699&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=b3eb7a2038c70f3fda5fd1e6889ac699&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=10a461523cc31771e79d907a333e7e4d&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=10a461523cc31771e79d907a333e7e4d&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=894aeedb4ddafc1399718c1114b14577&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=894aeedb4ddafc1399718c1114b14577&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=54d0ae02d29137196c3c66a388b0c6b0&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=54d0ae02d29137196c3c66a388b0c6b0&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=e28deb3b439ef6ec56b2051b51f464a2&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=e28deb3b439ef6ec56b2051b51f464a2&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=825c32603cf65bb72794253d235d80d9&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=825c32603cf65bb72794253d235d80d9&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=72a80c2c2603610ce5714e99b4e577f5&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=72a80c2c2603610ce5714e99b4e577f5&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lazysa.com/2009/08/701.html/feed</wfw:commentRss><description>内核转储（core dump）diskdump&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=828f786480a4dcfc22abbb4797d51378&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=828f786480a4dcfc22abbb4797d51378&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=33a20db349b9b0689cc8f11c3eb728c5&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=33a20db349b9b0689cc8f11c3eb728c5&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=b3eb7a2038c70f3fda5fd1e6889ac699&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=b3eb7a2038c70f3fda5fd1e6889ac699&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=10a461523cc31771e79d907a333e7e4d&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=10a461523cc31771e79d907a333e7e4d&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=894aeedb4ddafc1399718c1114b14577&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=894aeedb4ddafc1399718c1114b14577&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=54d0ae02d29137196c3c66a388b0c6b0&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=54d0ae02d29137196c3c66a388b0c6b0&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=e28deb3b439ef6ec56b2051b51f464a2&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=e28deb3b439ef6ec56b2051b51f464a2&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=825c32603cf65bb72794253d235d80d9&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=825c32603cf65bb72794253d235d80d9&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=72a80c2c2603610ce5714e99b4e577f5&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=72a80c2c2603610ce5714e99b4e577f5&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Linux</category><category>core dump</category><category>diskdump</category><category>内核转储</category><pubDate>Thu, 06 Aug 2009 09:33:08 +0800</pubDate><author>lazysa</author><comments>http://www.lazysa.com/2009/08/701.html#comments</comments><guid isPermaLink="false">http://www.lazysa.com/?p=701</guid><dc:creator>lazysa</dc:creator></item><item><title>内核转储（core dump）netdump</title><link>http://www.lazysa.com/2009/08/698.html</link><content:encoded>&lt;p&gt;&lt;strong&gt;netdump&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;netdump需要两台机器配合。&lt;br /&gt;
如果client端死机，则会把内存里面的信息dump到server。&lt;br /&gt;
client:&lt;br /&gt;
OS: Red Hat Enterprise Linux 4 update 7&lt;br /&gt;
server:&lt;br /&gt;
OS: Red Hat Enterprise Linux 4 update 7&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;client网络环境:&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;[root@station1 ~]# ifconfig&lt;br /&gt;
eth0 Link encap:Ethernet HWaddr 00:0C:29:22:61:B5&lt;br /&gt;
inet addr:192.168.0.1 Bcast:192.168.255.255 Mask:255.255.0.0&lt;br /&gt;
inet6 addr: fe80::20c:29ff:fe22:61b5/64 Scope:Link&lt;br /&gt;
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1&lt;br /&gt;
RX packets:4 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
collisions:0 txqueuelen:1000&lt;br /&gt;
RX bytes:240 (240.0 b) TX bytes:546 (546.0 b)&lt;br /&gt;
Interrupt:185 Base address:0&amp;#215;2000&lt;br /&gt;
eth1 Link encap:Ethernet HWaddr 00:0C:29:22:61:BF&lt;br /&gt;
inet addr:10.66.0.194 Bcast:10.66.1.255 Mask:255.255.254.0&lt;br /&gt;
inet6 addr: fe80::20c:29ff:fe22:61bf/64 Scope:Link&lt;br /&gt;
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1&lt;br /&gt;
RX packets:68 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
TX packets:57 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
collisions:0 txqueuelen:1000&lt;br /&gt;
RX bytes:9962 (9.7 KiB) TX bytes:7759 (7.5 KiB)&lt;br /&gt;
Interrupt:177 Base address:0&amp;#215;2080&lt;br /&gt;
lo Link encap:Local Loopback&lt;br /&gt;
inet addr:127.0.0.1 Mask:255.0.0.0&lt;br /&gt;
inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
UP LOOPBACK RUNNING MTU:16436 Metric:1&lt;br /&gt;
RX packets:8 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
collisions:0 txqueuelen:0&lt;br /&gt;
RX bytes:560 (560.0 b) TX bytes:560 (560.0 b)&lt;br /&gt;
[root@station1 ~]# route&lt;br /&gt;
Kernel IP routing table&lt;br /&gt;
Destination Gateway Genmask Flags Metric Ref Use Iface&lt;br /&gt;
10.66.0.0 * 255.255.254.0 U 0 0 0 eth1&lt;br /&gt;
169.254.0.0 * 255.255.0.0 U 0 0 0 eth1&lt;br /&gt;
192.168.0.0 * 255.255.0.0 U 0 0 0 eth0&lt;br /&gt;
default 10.66.1.254 0.0.0.0 UG 0 0 0 eth1&lt;br /&gt;
[root@station1 ~]#&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;server网络环境：&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;[root@station2 ~]# ifconfig&lt;br /&gt;
eth0 Link encap:Ethernet HWaddr 00:0C:29:32:64:A0&lt;br /&gt;
inet addr:192.168.0.2 Bcast:192.168.255.255 Mask:255.255.0.0&lt;br /&gt;
inet6 addr: fe80::20c:29ff:fe32:64a0/64 Scope:Link&lt;br /&gt;
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1&lt;br /&gt;
RX packets:0 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
collisions:0 txqueuelen:1000&lt;br /&gt;
RX bytes:0 (0.0 b) TX bytes:546 (546.0 b)&lt;br /&gt;
Interrupt:185 Base address:0&amp;#215;2000&lt;br /&gt;
eth1 Link encap:Ethernet HWaddr 00:0C:29:32:64:AA&lt;br /&gt;
inet addr:10.66.0.114 Bcast:10.66.1.255 Mask:255.255.254.0&lt;br /&gt;
inet6 addr: fe80::20c:29ff:fe32:64aa/64 Scope:Link&lt;br /&gt;
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1&lt;br /&gt;
RX packets:126 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
TX packets:55 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
collisions:0 txqueuelen:1000&lt;br /&gt;
RX bytes:16122 (15.7 KiB) TX bytes:7651 (7.4 KiB)&lt;br /&gt;
Interrupt:177 Base address:0&amp;#215;2080&lt;br /&gt;
lo Link encap:Local Loopback&lt;br /&gt;
inet addr:127.0.0.1 Mask:255.0.0.0&lt;br /&gt;
inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
UP LOOPBACK RUNNING MTU:16436 Metric:1&lt;br /&gt;
RX packets:8 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
collisions:0 txqueuelen:0&lt;br /&gt;
RX bytes:560 (560.0 b) TX bytes:560 (560.0 b)&lt;br /&gt;
[root@station2 ~]# route&lt;br /&gt;
Kernel IP routing table&lt;br /&gt;
Destination Gateway Genmask Flags Metric Ref Use Iface&lt;br /&gt;
10.66.0.0 * 255.255.254.0 U 0 0 0 eth1&lt;br /&gt;
169.254.0.0 * 255.255.0.0 U 0 0 0 eth1&lt;br /&gt;
192.168.0.0 * 255.255.0.0 U 0 0 0 eth0&lt;br /&gt;
default 10.66.1.254 0.0.0.0 UG 0 0 0 eth1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;配置server&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;[root@station2 ~]# rpm -q netdump-server&lt;br /&gt;
package netdump-server is not installed&lt;br /&gt;
[root@station2 ~]# mount /dev/cdrom /media/&lt;br /&gt;
mount: block device /dev/cdrom is write-protected, mounting read-only&lt;br /&gt;
[root@station2 ~]# cd /media/RedHat/RPMS/&lt;br /&gt;
[root@station2 RPMS]# rpm -ivh netdump-server-0.7.16-14.i386.rpm&lt;br /&gt;
warning: netdump-server-0.7.16-14.i386.rpm: V3 DSA signature: NOKEY, key ID&lt;br /&gt;
db42a60e&lt;br /&gt;
Preparing&amp;#8230; ########################################### [100%]&lt;br /&gt;
1:netdump-server ########################################### [100%]&lt;br /&gt;
[root@station2 RPMS]# service netdump-server&lt;br /&gt;
Usage: netdump-server {start|stop|status|restart|condrestart}&lt;br /&gt;
[root@station2 RPMS]# service netdump-server start&lt;br /&gt;
Starting netdump server: [ OK ]&lt;br /&gt;
[root@station2 RPMS]# chkconfig &amp;#8211;level 35 netdump-server on&lt;br /&gt;
[root@station2 RPMS]# passwd netdump&lt;br /&gt;
Changing password for user netdump.&lt;br /&gt;
New UNIX password:&lt;br /&gt;
BAD PASSWORD: it is based on a dictionary word&lt;br /&gt;
Retype new UNIX password:&lt;br /&gt;
passwd: all authentication tokens updated successfully.&lt;br /&gt;
[root@station2 RPMS]#&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;安装netdump-server会在系统里面添加netdump这个用户。作为netdump时候传输数据之用。&lt;br /&gt;
但是并不会给这个用户创建密码。所以这个用户默认是给锁住的。因此记得给netdump这个&lt;br /&gt;
用户分配密码！&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;配置client&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;[root@station1 ~]# rpm -q netdump&lt;br /&gt;
netdump-0.7.16-14&lt;br /&gt;
[root@station1 ~]# vi /etc/sysconfig/netdump&lt;/code&gt;&lt;br /&gt;
指定netdump-server的IP地址&lt;br /&gt;
&lt;code&gt;NETDUMPADDR=192.168.0.2&lt;br /&gt;
[root@station1 ~]# service netdump start&lt;br /&gt;
netdump@10.66.0.114&amp;#8217;s password:&lt;br /&gt;
initializing netdump [ OK ]&lt;br /&gt;
initializing netconsole [ OK ]&lt;br /&gt;
Message from syslogd@station1 at Mon Sep 22 17:47:38 2008 &amp;#8230;&lt;br /&gt;
station1 kernel: [...network console startup...]&lt;/code&gt;[root@station1 ~]#&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;然后在client上模拟crash&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;[root@station1 ~]# echo 1 &gt; /proc/sys/kernel/sysrq&lt;br /&gt;
[root@station1 ~]# echo c &gt; /proc/sysrq-trigger&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;然后netdump就给激活了。&lt;br /&gt;
当dump完数据，机器自动重启。&lt;br /&gt;
在server上检验数据&lt;br /&gt;
&lt;code&gt;[root@station2 ~]# cd /var/crash/&lt;br /&gt;
[root@station2 crash]# ll&lt;br /&gt;
total 16&lt;br /&gt;
drwx&amp;#8212;&amp;#8212; 2 netdump netdump 4096 Sep 22 18:05 192.168.0.1-2008-09-22-18:04&lt;br /&gt;
drwx&amp;#8212;&amp;#8212; 2 netdump netdump 4096 Sep 22 17:48 magic&lt;br /&gt;
drwxr-xr-x 2 netdump netdump 4096 Aug 4 2007 scripts&lt;br /&gt;
[root@station2 crash]# cd 192.168.0.1-2008-09-22-18\:04/&lt;br /&gt;
[root@station2 192.168.0.1-2008-09-22-18:04]# ll&lt;br /&gt;
total 81656&lt;br /&gt;
-rw&amp;#8212;&amp;#8212;- 1 netdump netdump 30592 Sep 22 18:05 log&lt;br /&gt;
-rw&amp;#8212;&amp;#8212;- 1 netdump netdump 268439552 Sep 22 18:05 vmcore&lt;br /&gt;
[root@station2 192.168.0.1-2008-09-22-18:04]# ll -h&lt;br /&gt;
total 80M&lt;br /&gt;
-rw&amp;#8212;&amp;#8212;- 1 netdump netdump 30K Sep 22 18:05 log&lt;br /&gt;
-rw&amp;#8212;&amp;#8212;- 1 netdump netdump 257M Sep 22 18:05 vmcore&lt;br /&gt;
[root@station2 192.168.0.1-2008-09-22-18:04]#&lt;/code&gt;&lt;br /&gt;
vmcore就是发生crash的时候内存里的数据。&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=26cb2aafa751ce32d49742d752e0edb4&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=26cb2aafa751ce32d49742d752e0edb4&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=b014720ef5c30af3faa375aad7aa6f37&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=b014720ef5c30af3faa375aad7aa6f37&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=b63a6e3aa99b0a377b8959b9a871e7a4&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=b63a6e3aa99b0a377b8959b9a871e7a4&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=5bd08dd5a9db2066328f4d0909e6cf25&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=5bd08dd5a9db2066328f4d0909e6cf25&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=dc8b91a31f55bbc7ca4ba34bd7f27db0&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=dc8b91a31f55bbc7ca4ba34bd7f27db0&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=d1d49aebb22f8764bd904207799b6a23&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=d1d49aebb22f8764bd904207799b6a23&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=910f43a80a0d164d179bdfcd36402160&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=910f43a80a0d164d179bdfcd36402160&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=de03c996a164ad9094a9ebb788dde596&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=de03c996a164ad9094a9ebb788dde596&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=88d02f0a561b2ac3444850f32ef18465&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=88d02f0a561b2ac3444850f32ef18465&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lazysa.com/2009/08/698.html/feed</wfw:commentRss><description>内核转储（core dump）netdump&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=26cb2aafa751ce32d49742d752e0edb4&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=26cb2aafa751ce32d49742d752e0edb4&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=b014720ef5c30af3faa375aad7aa6f37&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=b014720ef5c30af3faa375aad7aa6f37&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=b63a6e3aa99b0a377b8959b9a871e7a4&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=b63a6e3aa99b0a377b8959b9a871e7a4&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=5bd08dd5a9db2066328f4d0909e6cf25&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=5bd08dd5a9db2066328f4d0909e6cf25&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=dc8b91a31f55bbc7ca4ba34bd7f27db0&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=dc8b91a31f55bbc7ca4ba34bd7f27db0&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=d1d49aebb22f8764bd904207799b6a23&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=d1d49aebb22f8764bd904207799b6a23&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=910f43a80a0d164d179bdfcd36402160&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=910f43a80a0d164d179bdfcd36402160&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=de03c996a164ad9094a9ebb788dde596&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=de03c996a164ad9094a9ebb788dde596&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=88d02f0a561b2ac3444850f32ef18465&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=88d02f0a561b2ac3444850f32ef18465&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Linux</category><category>netdump</category><category>core dump</category><category>内核转储</category><pubDate>Thu, 06 Aug 2009 09:29:57 +0800</pubDate><author>lazysa</author><comments>http://www.lazysa.com/2009/08/698.html#comments</comments><guid isPermaLink="false">http://www.lazysa.com/?p=698</guid><dc:creator>lazysa</dc:creator></item><item><title>未来IT运维构想，运维思维变迁！</title><link>http://www.lazysa.com/2009/07/696.html</link><content:encoded>&lt;p&gt;　　为了借鉴国际上的先进IT管理经验，将管理标准逐步本土化，在不同行业和政府组织支持下，以游龙科技为代表的国内IT运维厂商的技术产品经历了几次较大的变革，而这也印证了国内IT服务管理的发展历程。&lt;/p&gt;
&lt;p&gt;　　当延续着设备管理→T服务流程管理→业务服务管理路线不断进步和发展的同时，不可避免地要对未来作充分的预想。“我们需要准备什么?”才是用户和厂商最关心的问题。&lt;/p&gt;
&lt;p&gt;　　运维要解决大量的异构系统&lt;/p&gt;
&lt;p&gt;　　国内企业数据中心建设的风起云涌，释放出更多需求，似乎也给本土厂商带来全新机遇。数据中心市场正在成为一个巨大的“蛋糕”。但在错综复杂的信息环境中，企业要想吸取有效信息，就必须面对跨越异构环境(硬件平台、操作系统、数据库平台等)带来的层层障碍。游龙科技根据多年的研究和经验积累，将服务器管理软件扩展到网络架构中的各个方面，经过实时全面的信息收集，对大量分散服务器集中管理的环境应用优势尤为明显。游龙科技研发部指出：从数据中心建设的实际需求来看，管理需求与硬件需求是不平衡的，前者因为要针对数据集中、统一、跨架构的IT运维管理，难度更大。异构平台的集中管理，因其是能够从全局掌控并保障数据中心顺畅运行的必要条件，已然成为用户最紧迫的需求之一。&lt;/p&gt;
&lt;p&gt;　　运维要向人工智能发展&lt;/p&gt;
&lt;p&gt;　　作为网络终端的用户，也许你现在很难记起，当IT部门首次将PC连接起来时，你就进入了一个复杂的系统。也就是从那个时候起，网络管理和监控就已经成为了挑战网络服务品质最大的难题。今天，我们似乎面临自我矛盾的问题，当在网络变得越来越大的时候，我们却害怕起来，能够控制的东西却越来越想逃离眼前的视线。我们可以预见，未来的综合智能网将为任何人提供随时随地可以接入网络的接口。在现代网络技术中，没有任何一个领域对这种系统化架构的需求比管理更为迫切。&lt;/p&gt;
&lt;p&gt;　　IT运维面临的挑战是从来未有的，在每一台网络设备前面，如果都有一个顶级专家才好，也许只有人工智能和神经网络可以成为企业运维的救赎。游龙科技认为，虽然现在的产品还不能实现完全职能化，但随着故障管理知识库的提取，游龙产品将借助大量的行业经验和用户基础在不久将来实现这个很多人都不敢想象的目标。&lt;/p&gt;
&lt;p&gt;　　运维产品本土化趋势加速&lt;/p&gt;
&lt;p&gt;　　在中国信息化建设的起步晚，这是不争的事实，中国市场也是长期请来“国外和尚”在念经，也许有人从来没有怀疑过，难道这些“经书”(ISO20000和ITIL)就是国外的吗?随着网络技术的国际化和同质化，国内较先进的企业在系统搭建和硬件设备的维护和管理水平已经接近国际水平，但总体综合运维服务与国外还是有较大差距，IT系统与业务进行融合还都大多处在纸上谈兵的阶段。&lt;/p&gt;
&lt;p&gt;　　我们应该感谢IT媒体，他们的宣传让ISO20000和ITILV3的神秘面纱已被拨开，用户对这些标准的观念从迷茫到崇拜，再到务实。大部分的用户相信，如果你能提供符合我们的方案和产品，证明你们能力的最佳方法是：“你是否具有大量相关行业的实施经验”。在经济海啸席卷全球的时候，中国的特殊经济地位犹如巍峨的巴拿撒斯山，以游龙科技为代表的国内IT运维产品厂商也在充分利用这样的时机缩短与国外竞争对手的差距。&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=c1296ac854332d2ff0b8fca95e14a84d&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=c1296ac854332d2ff0b8fca95e14a84d&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=8a9a97073f6b457bb40ae043c73c8853&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=8a9a97073f6b457bb40ae043c73c8853&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=53d1649c80605bef39ed122f97a37aaf&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=53d1649c80605bef39ed122f97a37aaf&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=7a3b639ea1eae925a6b082826ed7aac9&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=7a3b639ea1eae925a6b082826ed7aac9&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=724fcf066367062aa8887abf842a4693&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=724fcf066367062aa8887abf842a4693&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=1e6bae5eb95d78569044093c3fe5f29c&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=1e6bae5eb95d78569044093c3fe5f29c&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=71e909471d29c7002afa73d09d33d656&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=71e909471d29c7002afa73d09d33d656&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=a92e4833a47fa4a61d6c2aeec2e3d622&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=a92e4833a47fa4a61d6c2aeec2e3d622&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=7702bc2447727ca64e202647be184f71&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=7702bc2447727ca64e202647be184f71&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lazysa.com/2009/07/696.html/feed</wfw:commentRss><description>　　为了借鉴国际上的先进IT管理经验，将管理标准逐步本土化，在不同行业和政府组织支持下，以游龙科技为代表的国内IT运维厂商的技术产品经历了几次较大的变革，而这也印证了国内IT服务管理的发展历程。&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=c1296ac854332d2ff0b8fca95e14a84d&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=c1296ac854332d2ff0b8fca95e14a84d&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=8a9a97073f6b457bb40ae043c73c8853&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=8a9a97073f6b457bb40ae043c73c8853&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=53d1649c80605bef39ed122f97a37aaf&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=53d1649c80605bef39ed122f97a37aaf&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=7a3b639ea1eae925a6b082826ed7aac9&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=7a3b639ea1eae925a6b082826ed7aac9&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=724fcf066367062aa8887abf842a4693&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=724fcf066367062aa8887abf842a4693&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=1e6bae5eb95d78569044093c3fe5f29c&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=1e6bae5eb95d78569044093c3fe5f29c&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=71e909471d29c7002afa73d09d33d656&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=71e909471d29c7002afa73d09d33d656&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=a92e4833a47fa4a61d6c2aeec2e3d622&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=a92e4833a47fa4a61d6c2aeec2e3d622&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=7702bc2447727ca64e202647be184f71&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=7702bc2447727ca64e202647be184f71&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>运维管理</category><category>运维思维</category><category>IT运维</category><pubDate>Tue, 28 Jul 2009 23:53:53 +0800</pubDate><author>lazysa</author><comments>http://www.lazysa.com/2009/07/696.html#comments</comments><guid isPermaLink="false">http://www.lazysa.com/?p=696</guid><dc:creator>lazysa</dc:creator></item><item><title>【转载】squid 安装调试过程中的几个常用命令.</title><link>http://www.lazysa.com/2009/07/694.html</link><content:encoded>&lt;p&gt;当你的 squid.conf 配置文档按照你的想法修改完以后，启动 squid 之旅就开始了。&lt;br /&gt;
1，初始化你在 squid.conf 里配置的 cache 目录&lt;br /&gt;
&lt;code&gt;#squid/sbin/squid -z&lt;/code&gt;&lt;br /&gt;
如果有错误提示，请检查你的 cache目录的权限。&lt;br /&gt;
2，对你的squid.conf 排错，即验证 squid.conf 的 语法和配置。&lt;br /&gt;
&lt;code&gt;#squid/sbin/squid -k parse&lt;/code&gt;&lt;br /&gt;
如果squid.conf 有语法或配置错误，这里会返回提示你，如果没有返回，恭喜，可以尝试启动squid。&lt;br /&gt;
3，在前台启动squid，并输出启动过程。&lt;br /&gt;
&lt;code&gt;#squid/sbin/squid -N -d1&lt;/code&gt;&lt;br /&gt;
如果有到 ready to server reques，恭喜，启动成功。&lt;br /&gt;
然后 ctrl + c，停止squid，并以后台运行的方式启动它。&lt;br /&gt;
4，启动squid在后台运行。&lt;br /&gt;
&lt;code&gt;&lt;code&gt;#squid/sbin/squid -s&lt;/code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;这时候可以 ps -A 来查看系统进程，可以看到俩个 squid 进程。&lt;br /&gt;
5，停止 squid&lt;br /&gt;
&lt;code&gt;#squid/sbin/squid -k shutdown&lt;/code&gt;&lt;br /&gt;
这个不用解释吧。&lt;br /&gt;
6，重引导修改过的 squid.conf&lt;br /&gt;
&lt;code&gt;#squid/sbin/squid -k reconfigure&lt;/code&gt;&lt;br /&gt;
这个估计用的时候比较多，当你发现你的配置有不尽你意的时候，可以随时修改squid.conf，然后别忘记对你的 squid.conf排错，然后再执行此指令，即可让squid重新按照你的 squid.conf 来运行。&lt;br /&gt;
7，把squid添加到系统启动项&lt;br /&gt;
编辑 /etc/rc.d/rc.local&lt;br /&gt;
添加如下行：  /usr/local/squid/sbin/squid -s&lt;br /&gt;
当然，并不是每个人都喜欢这种启动方式，你可以用你最习惯的方式；或者把它安装为服务。&lt;/p&gt;
&lt;p&gt;再来点其他的。&lt;br /&gt;
1，修改cache 缓存目录的权限。&lt;br /&gt;
&lt;code&gt;#chown -R squid:squid /home/cache&lt;/code&gt;&lt;br /&gt;
我的cache缓存目录是 /home/cache,squid执行用户和用户组是 squid，squid。&lt;br /&gt;
2，修改squid 日志目录的权限&lt;br /&gt;
&lt;code&gt;#chown -R squid:squid /usr/local/squid/var/logs&lt;/code&gt;&lt;br /&gt;
这一步并不是适合每一个使用squid的用户.意为让squid有权限在该目录进行写操作 。&lt;br /&gt;
例如生成  access.log    cache.log   store.log&lt;br /&gt;
3，查看你的日志文档。&lt;br /&gt;
&lt;code&gt;#more /usr/local/squid/var/logs/access.log | grep TCP_MEM_HIT&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;该指令可以看到在squid运行过程中，有那些文件被squid缓存到内存中，并返回给访问用户。&lt;br /&gt;
&lt;code&gt;#more /usr/local/squid/var/logs/access.log | grep TCP_HIT&lt;/code&gt;&lt;br /&gt;
该指令可以看到在squid运行过程中，有那些文件被squid缓存到cache目录中，并返回给访问用户。&lt;br /&gt;
&lt;code&gt;#more /usr/local/squid/var/logs/access.log | grep TCP_MISS&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;该指令可以看到在squid运行过程中，有那些文件没有被squid缓存，而是现重原始服务器获取并返回给访问用户。&lt;br /&gt;
关于 TCP_XXXX 等参数及代表的信息，请参看《squid中文权威指南》13.2.1 章节。&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=db24d89676645545ba635ef0d5b83397&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=db24d89676645545ba635ef0d5b83397&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=3585e7296e59e88ccfcf11da4212df43&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=3585e7296e59e88ccfcf11da4212df43&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=5e846406e273e14cf714e022166db41b&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=5e846406e273e14cf714e022166db41b&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=0d93264b1bc953dd3a71aac7fb166e8a&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=0d93264b1bc953dd3a71aac7fb166e8a&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=65aef814ff9c774634fd2dcf17c94e8b&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=65aef814ff9c774634fd2dcf17c94e8b&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=3ca0820b597f3d517a666a334725425d&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=3ca0820b597f3d517a666a334725425d&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=04038e0d323413d68820b5263d078b93&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=04038e0d323413d68820b5263d078b93&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=a36e371052af373b098981de4a5db02b&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=a36e371052af373b098981de4a5db02b&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=b82b2e6fb186657dd39ec0c437ceac3e&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=b82b2e6fb186657dd39ec0c437ceac3e&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lazysa.com/2009/07/694.html/feed</wfw:commentRss><description>squid 安装调试过程中的几个常用命令.&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=db24d89676645545ba635ef0d5b83397&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=db24d89676645545ba635ef0d5b83397&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=3585e7296e59e88ccfcf11da4212df43&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=3585e7296e59e88ccfcf11da4212df43&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=5e846406e273e14cf714e022166db41b&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=5e846406e273e14cf714e022166db41b&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=0d93264b1bc953dd3a71aac7fb166e8a&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=0d93264b1bc953dd3a71aac7fb166e8a&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=65aef814ff9c774634fd2dcf17c94e8b&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=65aef814ff9c774634fd2dcf17c94e8b&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=3ca0820b597f3d517a666a334725425d&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=3ca0820b597f3d517a666a334725425d&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=04038e0d323413d68820b5263d078b93&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=04038e0d323413d68820b5263d078b93&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=a36e371052af373b098981de4a5db02b&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=a36e371052af373b098981de4a5db02b&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/lazysa?a=b82b2e6fb186657dd39ec0c437ceac3e&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/lazysa?i=b82b2e6fb186657dd39ec0c437ceac3e&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>squid</category><category>web应用</category><category>调试命令</category><pubDate>Tue, 28 Jul 2009 23:48:09 +0800</pubDate><author>lazysa</author><comments>http://www.lazysa.com/2009/07/694.html#comments</comments><guid isPermaLink="false">http://www.lazysa.com/?p=694</guid><dc:creator>lazysa</dc:creator></item></channel></rss>
