<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>运维博客 &#187; Shell</title>
	<atom:link href="http://www.ywbk.cc/category/shell/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ywbk.cc</link>
	<description>开发&#38;运维</description>
	<lastBuildDate>Thu, 28 May 2026 02:59:52 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.7.41</generator>
	<item>
		<title>grep、sed、awk正则表达式支持情况对比</title>
		<link>http://www.ywbk.cc/423.html</link>
		<comments>http://www.ywbk.cc/423.html#comments</comments>
		<pubDate>Sat, 16 Jun 2018 05:58:55 +0000</pubDate>
		<dc:creator><![CDATA[sxdgy]]></dc:creator>
				<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://05bk.com/?p=423</guid>
		<description><![CDATA[grep、sed、awk概述 grep 更适合单纯的查找或匹配文本。grep基本是以行为单位处理文本的； gr [&#8230;]]]></description>
				<content:encoded><![CDATA[<h2>grep、sed、awk概述</h2>
<p>grep 更适合单纯的查找或匹配文本。grep基本是以行为单位处理文本的； grep功能简单，就是一个简单的正则表达式的匹配。 grep可以理解为主要作用是在一个文件中查找过滤需要的内容。</p>
<p>sed 更适合编辑匹配到的文本。Sed是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝。sed编辑器按照一次处理一行的方式来处理文件（或者输入）并把输出送到屏幕上。sed把当前正在处理的行保存在一个临时缓存里，这个缓存叫做模式空间。一但sed完成了对模式空间里的行的处理（即对该行执行sed命令），就把模式空间的行送到屏幕上（除非该命令要删除该行活禁止打印）。处理完该行之后，从模式空间里删除它，然后把下一行读入模式空间，进行处理，并显示。当输入文件的最后一行处理完后，sed终止。通过把每一行存在一个临时缓存里并编辑该行，初始文件不会被修改或被破坏。</p>
<p>awk 更适合格式化文本，对文本进行较复杂格式处理。awk可以通过指定分隔符将一行（一条记录）划分为多个字段，以字段为单位处理文本。awk中支持C语法，可以有分支条件判断、循环语句等，相当于一个小型编程语言。awk不是过滤查找，而是文本处理工具，是把一个文件处理成你想要的格式。awk是一种样式扫描与处理工具。它几乎可以完成grep和sed所能完成的全部工作，同时，它还可以可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。如果你要处理与文本样式扫描相关的工作，awk应该是你的第一选择。</p>
<h2>正则表达式基础</h2>
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="color: #ffffff; width: 50px;" bgcolor="#808080">元字符</td>
<td style="color: #ffffff;" bgcolor="#808080">含义</td>
<td style="color: #ffffff;" bgcolor="#808080">举例</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">.</td>
<td style="color: #ffffff;" bgcolor="#f78585">匹配任何单个字符</td>
<td style="color: #ffffff;" bgcolor="#f78585">r.t可匹配：rat、rut、r t，但不匹配root</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">*</td>
<td style="color: #ffffff;" bgcolor="#f78585">匹配0或多个在它前面的一个字符</td>
<td style="color: #ffffff;" bgcolor="#f78585">.*能够匹配任意数量的任何字符</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">^</td>
<td style="color: #ffffff;" bgcolor="#f78585">匹配一行的开始</td>
<td style="color: #ffffff;" bgcolor="#f78585">^When能够匹配&#8221;When in the course&#8221;的开始，但是不能匹配&#8221;What and When in the&#8221;</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">$</td>
<td style="color: #ffffff;" bgcolor="#f78585">匹配行结束符</td>
<td style="color: #ffffff;" bgcolor="#f78585">weasel$ 能够匹配&#8221;He&#8217;s a weasel&#8221;的末尾，但不能匹配&#8221;They are a bunch of weasels.&#8221;</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">\</td>
<td style="color: #ffffff;" bgcolor="#f78585">转义符，用来将元字符当作普通的字符来进行匹配</td>
<td style="color: #ffffff;" bgcolor="#f78585">\$被用来匹配美元符号，而不是行尾，\.用来匹配点字符，而不是任何字符的通配符</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">[ ]<br />
[n-m]<br />
[^n-m]</td>
<td style="color: #ffffff;" bgcolor="#f78585">匹配括号中的任何一个字符，可使用-来指定区间，在左括号和第一个字符之间使用^字符表示排除</td>
<td style="color: #ffffff;" bgcolor="#f78585">r[aou]t匹配rat、rot、rut，但不匹配ret。[0-9]可以匹配任何数字字符，还可以指定定多个区间，如[A-Za-z]可以匹配任何大小写字母。[^269A-Z]匹配除了2、6、9和所有大写字母之外的任何字符</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">\&lt; \&gt;</td>
<td style="color: #ffffff;" bgcolor="#f78585">匹配单词（word）的开始（\&lt;）和结束（\&gt;）</td>
<td style="color: #ffffff;" bgcolor="#f78585">\&lt;the能够匹配字符串&#8221;for the wise&#8221;中的&#8221;the&#8221;，但是不能匹配字符串&#8221;otherwise&#8221;中的&#8221;the&#8221;</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">\(\)</td>
<td style="color: #ffffff;" bgcolor="#f78585">将\(和\)之间的表达式定义为“组”，并将匹配结果保存到一个临时区域（最多9个），可以用\1到\9来引用</td>
<td style="color: #ffffff;" bgcolor="#f78585">暂无</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">|</td>
<td style="color: #ffffff;" bgcolor="#f78585">将两个匹配条件进行逻辑“或”运算</td>
<td style="color: #ffffff;" bgcolor="#f78585">(him|her) 匹配&#8221;him and i&#8221;和&#8221;her and i&#8221;，但不能匹配&#8221;them.&#8221;</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">+</td>
<td style="color: #ffffff;" bgcolor="#f78585">匹配1或多个在它前面的一个字符</td>
<td style="color: #ffffff;" bgcolor="#f78585">9+匹配9、99、999等</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">?</td>
<td style="color: #ffffff;" bgcolor="#f78585">匹配0或1个正好在它之前的那个字符</td>
<td style="color: #ffffff;" bgcolor="#f78585">暂无</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">\{i\}<br />
\{i,j\}</td>
<td style="color: #ffffff;" bgcolor="#f78585">匹配指定数目的字符，这些字符是在它之前的表达式定义的</td>
<td style="color: #ffffff;" bgcolor="#f78585">A[0-9]\{3\}能够匹配A123、A348等，但不能匹配A1234。而正则表达式[0-9]\{4,6\}匹配连续的任意4个、5个或者6个数字字符</td>
</tr>
</tbody>
</table>
<h2>正则表达式支持对比</h2>
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="color: #ffffff;" bgcolor="#808080">命令或环境</td>
<td style="color: #ffffff;" bgcolor="#808080">.</td>
<td style="color: #ffffff;" bgcolor="#808080">[ ]</td>
<td style="color: #ffffff;" bgcolor="#808080">^</td>
<td style="color: #ffffff;" bgcolor="#808080">$</td>
<td style="color: #ffffff;" bgcolor="#808080">\(\)</td>
<td style="color: #ffffff;" bgcolor="#808080">\{ \}</td>
<td style="color: #ffffff;" bgcolor="#808080">?</td>
<td style="color: #ffffff;" bgcolor="#808080">+</td>
<td style="color: #ffffff;" bgcolor="#808080">|</td>
<td style="color: #ffffff;" bgcolor="#808080">( )</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">vi</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">awk</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">sed</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">grep</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">egrep</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">fgrep</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585">●</td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
<td style="color: #ffffff;" bgcolor="#f78585"></td>
</tr>
</tbody>
</table>
<p>转载请注明：<a href="http://www.ywbk.cc">运维博客</a> &raquo; <a href="http://www.ywbk.cc/423.html">grep、sed、awk正则表达式支持情况对比</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ywbk.cc/423.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>awk 日常工作用法总结</title>
		<link>http://www.ywbk.cc/422.html</link>
		<comments>http://www.ywbk.cc/422.html#comments</comments>
		<pubDate>Tue, 05 Jun 2018 01:45:16 +0000</pubDate>
		<dc:creator><![CDATA[sxdgy]]></dc:creator>
				<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://05bk.com/?p=422</guid>
		<description><![CDATA[AWK 是一种优良的文本处理工具。它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。A [&#8230;]]]></description>
				<content:encoded><![CDATA[<blockquote><p>AWK 是一种优良的文本处理工具。它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。AWK 名称得自于它的创始人，分别是 Alfred Aho、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。AWK 提供了极其强大的功能：可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。</p></blockquote>
<h2>语法格式</h2>
<pre class="prettyprint linenums">awk [选项参数] 'script' var=value file(s)
awk [选项参数] -f scriptfile var=value file(s)</pre>
<p>常用选项参数：</p>
<ul>
<li>-F fs 或 &#8211;field-separator fs 指定文件折分符，默认是空格。fs是一个字符串或者是一个正则表达式，如-F:</li>
<li>-v var=value 或 &#8211;asign var=value 赋值一个用户定义变量</li>
<li>-f scripfile 或 &#8211;file scriptfile 从脚本文件中读取awk命令</li>
</ul>
<h2>使用默认分隔符，输出1、4列</h2>
<pre class="prettyprint linenums">awk '{print $1,$4}' log.txt
#不指定分隔符-F，默认是空格分割列
awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
#上面是格式化输出</pre>
<h2>指定分隔符，输出1、2列</h2>
<pre class="prettyprint linenums">awk -F, '{print $1,$2}'   log.txt
# 使用内建变量
awk 'BEGIN{FS=","} {print $1,$2}'     log.txt
# 使用多个分隔符：先使用空格分割，然后对分割结果再使用","分割
awk -F '[ ,]'  '{print $1,$2,$5}'   log.txt</pre>
<h2>设置变量</h2>
<pre class="prettyprint linenums">awk -v a=1 '{print $1,$1+a}' log.txt
awk -v a=1 -vb=s '{print $1,$1+a,$1b}' log.txt</pre>
<h2>从脚本文件中读取命令</h2>
<pre class="prettyprint linenums"> awk -f cal.awk log.txt</pre>
<h2>运算符</h2>
<table cellspacing="0" cellpadding="0">
<thead>
<tr>
<td style="color: #ffffff;" bgcolor="#808080">运算符</td>
<td style="color: #ffffff;" bgcolor="#808080">描述</td>
</tr>
</thead>
<tbody>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">= += -= *= /= %= ^= **=</td>
<td style="color: #ffffff;" bgcolor="#f78585">赋值</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">?:</td>
<td style="color: #ffffff;" bgcolor="#f78585">条件表达式</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">||</td>
<td style="color: #ffffff;" bgcolor="#f78585">逻辑或</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">&amp;&amp;</td>
<td style="color: #ffffff;" bgcolor="#f78585">逻辑与</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">~ ~!</td>
<td style="color: #ffffff;" bgcolor="#f78585">匹配正则表达式和不匹配正则表达式</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">&lt; &lt;= &gt; &gt;= != ==</td>
<td style="color: #ffffff;" bgcolor="#f78585">关系运算符</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">空格</td>
<td style="color: #ffffff;" bgcolor="#f78585">连接</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">+ -</td>
<td style="color: #ffffff;" bgcolor="#f78585">加，减</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">* / %</td>
<td style="color: #ffffff;" bgcolor="#f78585">乘，除，求余</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">+ &#8211; !</td>
<td style="color: #ffffff;" bgcolor="#f78585">加，减，逻辑非</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">^ ***</td>
<td style="color: #ffffff;" bgcolor="#f78585">求幂</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">++ &#8211;</td>
<td style="color: #ffffff;" bgcolor="#f78585">增加或减少，作为前缀或后缀</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">$</td>
<td style="color: #ffffff;" bgcolor="#f78585">字段引用</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">in</td>
<td style="color: #ffffff;" bgcolor="#f78585">数组成员</td>
</tr>
</tbody>
</table>
<h2>根据列的值大小过滤</h2>
<p>过滤第一列值大于2的行</p>
<pre class="prettyprint linenums">awk '$1&gt;2' log.txt</pre>
<p>过滤第一列等于2的行</p>
<pre class="prettyprint linenums">awk '$1==2 {print $1,$3}' log.txt</pre>
<p>过滤第一列大于2并且第二列等于&#8217;Are&#8217;的行</p>
<pre class="prettyprint linenums">awk '$1&gt;2 &amp;&amp; $2=="Are" {print $1,$2,$3}' log.txt</pre>
<h2>内建变量</h2>
<table cellspacing="0" cellpadding="0">
<thead>
<tr>
<td style="color: #ffffff;" bgcolor="#808080">变量</td>
<td style="color: #ffffff;" bgcolor="#808080">描述</td>
</tr>
</thead>
<tbody>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">$n</td>
<td style="color: #ffffff;" bgcolor="#f78585">当前记录的第n个字段，字段间由FS分隔</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">$0</td>
<td style="color: #ffffff;" bgcolor="#f78585">完整的输入记录</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">ARGC</td>
<td style="color: #ffffff;" bgcolor="#f78585">命令行参数的数目</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">ARGIND</td>
<td style="color: #ffffff;" bgcolor="#f78585">命令行中当前文件的位置(从0开始算)</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">ARGV</td>
<td style="color: #ffffff;" bgcolor="#f78585">包含命令行参数的数组</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">CONVFMT</td>
<td style="color: #ffffff;" bgcolor="#f78585">数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">ERRNO</td>
<td style="color: #ffffff;" bgcolor="#f78585">最后一个系统错误的描述</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">FIELDWIDTHS</td>
<td style="color: #ffffff;" bgcolor="#f78585">字段宽度列表(用空格键分隔)</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">FILENAME</td>
<td style="color: #ffffff;" bgcolor="#f78585">当前文件名</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">FNR</td>
<td style="color: #ffffff;" bgcolor="#f78585">各文件分别计数的行号</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">FS</td>
<td style="color: #ffffff;" bgcolor="#f78585">字段分隔符(默认是任何空格)</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">IGNORECASE</td>
<td style="color: #ffffff;" bgcolor="#f78585">如果为真，则进行忽略大小写的匹配</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">NF</td>
<td style="color: #ffffff;" bgcolor="#f78585">一条记录的字段的数目</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">NR</td>
<td style="color: #ffffff;" bgcolor="#f78585">已经读出的记录数，就是行号，从1开始</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">OFMT</td>
<td style="color: #ffffff;" bgcolor="#f78585">数字的输出格式(默认值是%.6g)</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">OFS</td>
<td style="color: #ffffff;" bgcolor="#f78585">输出记录分隔符（输出换行符），输出时用指定的符号代替换行符</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">ORS</td>
<td style="color: #ffffff;" bgcolor="#f78585">输出记录分隔符(默认值是一个换行符)</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">RLENGTH</td>
<td style="color: #ffffff;" bgcolor="#f78585">由match函数所匹配的字符串的长度</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">RS</td>
<td style="color: #ffffff;" bgcolor="#f78585">记录分隔符(默认是一个换行符)</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">RSTART</td>
<td style="color: #ffffff;" bgcolor="#f78585">由match函数所匹配的字符串的第一个位置</td>
</tr>
<tr>
<td style="color: #ffffff;" bgcolor="#1abc9c">SUBSEP</td>
<td style="color: #ffffff;" bgcolor="#f78585">数组下标分隔符(默认值是/034)</td>
</tr>
</tbody>
</table>
<p>输出顺序号NR, 匹配文本行号FNR</p>
<pre class="prettyprint linenums">awk '{print NR,FNR,$1,$2,$3}' log.txt</pre>
<p>指定输出分割符</p>
<pre class="prettyprint linenums">awk '{print $1,$2,$5}' OFS=" $ "  log.txt</pre>
<h2>使用正则，字符串匹配</h2>
<pre class="prettyprint linenums">输出第二列包含 "th"，并打印第二列与第四列
awk '$2 ~ /th/ {print $2,$4}' log.txt
# ~ 表示模式开始。// 中是模式。</pre>
<pre class="prettyprint linenums">输出包含"re" 的行
awk '/re/ ' log.txt</pre>
<hr />
<h2>忽略大小写</h2>
<pre class="prettyprint linenums">awk 'BEGIN{IGNORECASE=1} /this/' log.txt</pre>
<h2>模式取反</h2>
<pre class="prettyprint linenums">awk '$2 !~ /th/ {print $2,$4}' log.txt
awk '!/th/ {print $2,$4}' log.txt</pre>
<h2>awk脚本</h2>
<p>关于awk脚本，我们需要注意两个关键词BEGIN和END。</p>
<ul>
<li>BEGIN{ 这里面放的是执行前的语句 }</li>
<li>{这里面放的是处理每一行时要执行的语句}</li>
<li>END {这里面放的是处理完所有的行后要执行的语句 }</li>
</ul>
<p>awk脚本如下:</p>
<pre class="prettyprint linenums">#!/bin/awk -f
#运行前
BEGIN {
    printf "begin\n"
}
#运行中
{
    printf "run\n"
}
#运行后
END {
    printf "end\n"
}</pre>
<h2>AWK输出hello world脚本</h2>
<pre class="prettyprint linenums">BEGIN { print "Hello, world!" }</pre>
<h2>计算文件大小脚本</h2>
<pre class="prettyprint linenums">ls -l *.txt | awk '{sum+=$6} END {print sum}'</pre>
<h2>找出长度大于80的行</h2>
<pre class="prettyprint linenums">awk 'length&gt;80' log.txt</pre>
<h2>打印九九乘法表</h2>
<pre class="prettyprint linenums">seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i&lt;=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}'</pre>
<p>转载请注明：<a href="http://www.ywbk.cc">运维博客</a> &raquo; <a href="http://www.ywbk.cc/422.html">awk 日常工作用法总结</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ywbk.cc/422.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sed 工作日常用法总结</title>
		<link>http://www.ywbk.cc/421.html</link>
		<comments>http://www.ywbk.cc/421.html#comments</comments>
		<pubDate>Thu, 31 May 2018 13:27:45 +0000</pubDate>
		<dc:creator><![CDATA[sxdgy]]></dc:creator>
				<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://05bk.com/?p=421</guid>
		<description><![CDATA[sed(Stream Editor)文本流编辑，是一个非交互式的面向字符流的编辑器。能同时处理多个文件多行的内 [&#8230;]]]></description>
				<content:encoded><![CDATA[<blockquote><p>sed(Stream Editor)文本流编辑，是一个非交互式的面向字符流的编辑器。能同时处理多个文件多行的内容，可以把只匹配到模式的内容输入到屏幕上，还可以对原文件改动但不输入屏幕上。sed命令是利用script来来处理、编辑文本文件。Sed主要用来自动编辑一个或多个文件；简化对文件的反复操作；编写转换程序等。</p></blockquote>
<h2>语法格式</h2>
<pre class="prettyprint linenums">sed [-hnVi][-e&lt;script&gt;][-f&lt;script文件&gt;][文本文件]</pre>
<p>参数说明：</p>
<ul>
<li>-h或&#8211;help 显示帮助。</li>
<li>-n或&#8211;quiet或&#8211;silent 仅显示script处理后的结果。</li>
<li>-V或&#8211;version 显示版本信息。</li>
<li>-i或&#8211;in-place 直接修改文件内容。</li>
<li>-e&lt;script&gt;或&#8211;expression=&lt;script&gt; 以选项中指定的script来处理输入的文本文件。</li>
<li>-f&lt;script文件&gt;或&#8211;file=&lt;script文件&gt; 以选项中指定的script文件来处理输入的文本文件。</li>
</ul>
<p>动作说明：</p>
<ul>
<li>a ：新增， a 的后面可以接字串，而这些字串会在新的一行出现(目前的下一行)</li>
<li>c ：取代， c 的后面可以接字串，这些字串可以取代 n1,n2 之间的行</li>
<li>d ：删除，因为是删除所以 d 后面通常不接任何东西</li>
<li>i ：插入， i 的后面可以接字串，而这些字串会在新的一行出现(目前的上一行)</li>
<li>p ：打印，即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行</li>
<li>s ：取代，替换指定字符。通常 s 的动作可以搭配正规表示法！例如 1,20s/old/new/g</li>
</ul>
<h2>在第四行后添加一行</h2>
<pre class="prettyprint linenums">sed -e 4a\newLine testfile</pre>
<h2>以行为单位的新增/删除</h2>
<p>将第 2~5 行删除</p>
<pre class="prettyprint linenums">nl /etc/passwd | sed '2,5d'
#注意，默认 -e 可以省略。还有sed 后面接的动作，务必以两个单引号括住！</pre>
<p>只要删除第 2 行</p>
<pre class="prettyprint linenums">nl /etc/passwd | sed '2d'</pre>
<p>删除第 3 到最后一行</p>
<pre class="prettyprint linenums">nl /etc/passwd | sed '3,$d'</pre>
<p>在第2行后新增一行</p>
<pre class="prettyprint linenums">nl /etc/passwd | sed '2a new line'</pre>
<p>在第2行前新增一行</p>
<pre class="prettyprint linenums">nl /etc/passwd | sed '2i new line'</pre>
<p>在第2行后新增两行</p>
<pre class="prettyprint linenums">[root@www ~]# nl /etc/passwd | sed '2a line1\
&gt; line2'
#注意，行之间都必须使用反斜杠\。</pre>
<h2>以行为单位的替换与显示</h2>
<p>将2-5行替换</p>
<pre class="prettyprint linenums">nl /etc/passwd | sed '2,5c new line'</pre>
<p>仅列出第 5-7 行</p>
<pre class="prettyprint linenums">nl /etc/passwd | sed -n '5,7p'</pre>
<h2>文本搜索</h2>
<p>搜索root关键字的行</p>
<pre class="prettyprint linenums">nl /etc/passwd | sed '/root/p'
#会输出所有行，同时把匹配行再打印多一遍。</pre>
<p>只打印匹配的行</p>
<pre class="prettyprint linenums">nl /etc/passwd | sed -n '/root/p'</pre>
<p>删除匹配的行，其他行输出</p>
<pre class="prettyprint linenums">nl /etc/passwd | sed  '/root/d'</pre>
<p>数据的搜寻并执行命令</p>
<pre class="prettyprint linenums">nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}'    
#搜索root对应的行，执行花括号中的一组命令，每个命令之间用分号分隔，这里是把bash替换为blueshell，p是输出这行，q是退出。</pre>
<p>数据的搜寻并替换</p>
<pre class="prettyprint linenums">#sed 的搜寻与替代的与 vi 类似：
sed 's/要被取代的字串/新的字串/g'
/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
#将 IP 前面的部分替换成空，再将后面的部分替换成空</pre>
<h2>多点编辑</h2>
<pre class="prettyprint linenums">nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
#-e表示多点编辑，第一个编辑命令删除第三行到末尾，第二条命令搜索替换</pre>
<h2>直接修改文件内容</h2>
<p>sed 可以直接修改文件的内容，不必使用管道命令或数据流重定向，工作中使用前记得先备份原文件。</p>
<pre class="prettyprint linenums">sed -i '$a last' test.txt
# $ 代表的是最后一行，而 a 的动作是新增</pre>
<p>转载请注明：<a href="http://www.ywbk.cc">运维博客</a> &raquo; <a href="http://www.ywbk.cc/421.html">sed 工作日常用法总结</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ywbk.cc/421.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>grep / egrep 工作日常用法总结</title>
		<link>http://www.ywbk.cc/420.html</link>
		<comments>http://www.ywbk.cc/420.html#comments</comments>
		<pubDate>Wed, 09 May 2018 13:32:29 +0000</pubDate>
		<dc:creator><![CDATA[sxdgy]]></dc:creator>
				<category><![CDATA[Shell]]></category>
		<category><![CDATA[egrep]]></category>
		<category><![CDATA[grep]]></category>

		<guid isPermaLink="false">http://05bk.com/?p=420</guid>
		<description><![CDATA[grep (global search regular expression(RE)全面搜索正则表达式)是一种 [&#8230;]]]></description>
				<content:encoded><![CDATA[<blockquote><p>grep (global search regular expression(RE)全面搜索正则表达式)是一种强大的文本搜索工具，它能使用正则表达式搜索文本，并把匹配的行打印出来。grep家族包括grep、egrep、fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展，支持更多的re元字符， fgrep就是fixed grep或fast grep，它们把所有的字母都看作单词，也就是说，正则表达式中的元字符表示回其自身的字面意义，不再具有其他特殊含义，一般使用较少。linux使用GNU版本的grep。它功能更强，可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。</p></blockquote>
<h2>grep基本语法格式</h2>
<pre class="prettyprint linenums">grep [-acinvABC] 'word' filename
-a ：以文本文件方式进行搜索
-c ：打印符合要求的行数
-i ：忽略大小写
-n ：在输出符合要求的行的同时连同行号一起输出
-v ：打印不符合要求的行
-A ：后跟一个数字（有无空格都可以），例如 –A2则表示打印符合要求的行以及下面两行
-B ：后跟一个数字，例如 –B2 则表示打印符合要求的行以及上面两行
-C ：后跟一个数字，例如 –C2 则表示打印符合要求的行以及上下各两行
正则表达式中：. 表示任意一个字符， * 表示零个或多个前面的字符，^表示行的开始， $表示行的结尾，^$表示空行，[]表示匹配括号任意一个字符，[^字符] 表示除方括号内的字符之外的字符</pre>
<h2>过滤出带有某个关键词的行并输出行号</h2>
<pre class="prettyprint linenums">grep -n 'root' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
11:operator:x:11:0:operator:/root:/sbin/nologin</pre>
<h2>过滤出不带有某个关键词的行并输出行号</h2>
<pre class="prettyprint linenums">grep -nv 'nologin' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt</pre>
<h2>过滤出所有包含数字的行</h2>
<pre class="prettyprint linenums">grep '[0-9]' /etc/inittab
# upstart works, see init(5), init(8), and initctl(8).
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
id:3:initdefault:</pre>
<h2>过滤出所有不包含数字的行</h2>
<pre class="prettyprint linenums">grep -v '[0-9]' /etc/inittab</pre>
<h2>过滤出不以#开头的行</h2>
<pre class="prettyprint linenums">grep -v '^#' /etc/inittab
id:3:initdefault:</pre>
<h2>过滤出不以#开头的非空行</h2>
<pre class="prettyprint linenums">grep -v '^#' /etc/crontab |grep -v '^$'
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/</pre>
<h2>过滤出不以字母开头的行</h2>
<pre class="prettyprint linenums">grep '^[^a-zA-Z]' test.txt</pre>
<h2>过滤出包含非字母的行</h2>
<pre class="prettyprint linenums">grep '[^a-zA-Z]' test.txt</pre>
<h2>过滤任意一个字符</h2>
<pre class="prettyprint linenums">grep 'r..o' /etc/passwd
operator:x:11:0:operator:/root:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin</pre>
<h2>过滤重复字符</h2>
<pre class="prettyprint linenums">grep 'ooo*' /etc/passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin</pre>
<h2>匹配所有行</h2>
<pre class="prettyprint linenums">grep '.*' /etc/passwd |wc -l
#.*表示零个或多个任意字符，空行也包含在内。</pre>
<h2>过滤指定字符出现的次数</h2>
<pre class="prettyprint linenums">grep 'o\{2\}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
#{ }表示前面的字符要重复的次数。使用时两边需要加上转义字符 \。{n1,}表示至少n1次。{n1,n2}表示n1至n2次。</pre>
<h2>egrep筛选一个或一个以上前面的字符</h2>
<pre class="prettyprint linenums">egrep 'o+' test.txt</pre>
<h2>egrep筛选零个或一个前面的字符</h2>
<pre class="prettyprint linenums">egrep 'o?' test.txt</pre>
<h2>egrep筛选字符串1或字符串2</h2>
<pre class="prettyprint linenums">egrep 'aaa|ooo' test.txt</pre>
<h2>egrep中( )的应用</h2>
<pre class="prettyprint linenums">egrep 'r(oo|at)o' test.txt
egrep '(oo)+' test.txt
#用( )表示一个整体，例如(oo)+就表示1个 ‘oo’ 或者多个 ‘oo’</pre>
<p>转载请注明：<a href="http://www.ywbk.cc">运维博客</a> &raquo; <a href="http://www.ywbk.cc/420.html">grep / egrep 工作日常用法总结</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ywbk.cc/420.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>shell中[-eq][-ne][-gt][-lt][-ge][-le]的含义</title>
		<link>http://www.ywbk.cc/216.html</link>
		<comments>http://www.ywbk.cc/216.html#comments</comments>
		<pubDate>Sat, 05 May 2018 02:45:56 +0000</pubDate>
		<dc:creator><![CDATA[sxdgy]]></dc:creator>
				<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://05bk.com/?p=216</guid>
		<description><![CDATA[eq等于、ne不等于、gt大于、lt小于、ge大于等于、le 小于等于 -eq    //等于（equal）  [&#8230;]]]></description>
				<content:encoded><![CDATA[<h2>eq等于、ne不等于、gt大于、lt小于、ge大于等于、le 小于等于</h2>
<pre class="prettyprint linenums">-eq    //等于（equal）
-ne    //不等于
-gt    //大于（greater）
-lt    //小于（less）
-ge    //大于等于
-le    //小于等于</pre>
<p>在linux 中 命令执行状态：0 为真，其他为假</p>
<p>&nbsp;</p>
<p>转载请注明：<a href="http://www.ywbk.cc">运维博客</a> &raquo; <a href="http://www.ywbk.cc/216.html">shell中[-eq][-ne][-gt][-lt][-ge][-le]的含义</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ywbk.cc/216.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux shell字符串截的八种方法</title>
		<link>http://www.ywbk.cc/371.html</link>
		<comments>http://www.ywbk.cc/371.html#comments</comments>
		<pubDate>Sat, 28 Apr 2018 08:33:01 +0000</pubDate>
		<dc:creator><![CDATA[sxdgy]]></dc:creator>
				<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://05bk.com/?p=371</guid>
		<description><![CDATA[var=http://www.05bk.com/123.htm 1. #代表从左懒惰匹配，删除左边，保留右边  [&#8230;]]]></description>
				<content:encoded><![CDATA[<pre class="prettyprint linenums">var=http://www.05bk.com/123.htm</pre>
<h2>1. #代表从左懒惰匹配，删除左边，保留右边</h2>
<pre class="prettyprint linenums">echo ${var#*/}
/www.05bk.com/123.htm
#其中 var 是变量名，# 号是运算符，*// 表示从左边开始删除至"//"</pre>
<h2>2. ##代表从左贪婪匹配，删除左边，保留右边</h2>
<pre class="prettyprint linenums">echo ${var##*/}
123.htm
#其中##*/ 表示从左边开始删除最后（最右边）一个 / 号及左边的所有字符</pre>
<h2>3. %代表从右懒惰匹配，删除右边，保留左边</h2>
<pre class="prettyprint linenums">echo ${var%/*}

http://www.05bk.com

#其中%/* 表示从右边开始，删除第一个 / 号及右边的字符</pre>
<h2>4. %%代表从右贪婪匹配，删除右边，保留左边</h2>
<pre class="prettyprint linenums">echo ${var%%/*}
http:
#%%/* 表示从右边开始，删除最后（最左边）一个 / 号及右边的字符</pre>
<h2>5. 从左边第几个字符开始:偏移字符总数</h2>
<pre class="prettyprint linenums">echo ${var:0:5}
http:
#其中的 0 表示左边第一个字符开始，5 表示字符的总个数。</pre>
<h2>6. 从左边第几个字符开始一直到结束</h2>
<pre class="prettyprint linenums">echo ${var:7}
www.05bk.com/123.htm
#其中的 7 表示左边第8个字符开始，一直到结束。</pre>
<h2>7. 从右边第几个字符开始:偏移字符的总数</h2>
<pre class="prettyprint linenums">echo ${var:0-7:3}
123
#其中的 0-7 表示右边算起第七个字符开始，3 表示字符的个数。</pre>
<h2>8. 从右边第几个字符开始一直到结束</h2>
<pre class="prettyprint linenums">echo ${var:0-7}
123.htm
#表示从右边第七个字符开始，一直到结束。</pre>
<p>注：（左边的第一个字符是用 0 表示，右边的第一个字符用 0-1 表示）</p>
<p>转载请注明：<a href="http://www.ywbk.cc">运维博客</a> &raquo; <a href="http://www.ywbk.cc/371.html">Linux shell字符串截的八种方法</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ywbk.cc/371.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux平台执行shell脚本四种方式</title>
		<link>http://www.ywbk.cc/338.html</link>
		<comments>http://www.ywbk.cc/338.html#comments</comments>
		<pubDate>Mon, 23 Apr 2018 06:57:48 +0000</pubDate>
		<dc:creator><![CDATA[sxdgy]]></dc:creator>
				<category><![CDATA[Shell]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://05bk.com/?p=338</guid>
		<description><![CDATA[1.bash或sh执行 格式：bash script或sh script 这是当脚本文件本身没有可执行权限（即 [&#8230;]]]></description>
				<content:encoded><![CDATA[<h2>1.bash或sh执行</h2>
<pre class="prettyprint linenums">格式：bash script或sh script</pre>
<p>这是当脚本文件本身没有可执行权限（即文件权限属性x位为-）时常使用的方法，或脚本文件开头没有指定解释器时需要使用的方法。这也是推荐使用的方法。</p>
<h2>2.直接执行</h2>
<pre class="prettyprint linenums">格式：/path/script或./script</pre>
<p>指在当前路径下执行脚本，要将脚本文件的权限先改为可执行（即文件权限属性加x位)，具体方法为chmod +x script。然后通过脚本绝对路径或相对路径就可以直接执行脚本了。</p>
<h2>3.shell环境执行</h2>
<pre class="prettyprint linenums">格式：source script或. script</pre>
<p>这种方法通常是使用source或. (注意和后面的脚本名之间要有空格)读入或加载指定的Shell脚本文件，然后依次执行。source或. 相当于include的功能。DHTTP服务软件Apache、Nginx等配置文件里都支持这样的用法。这些语句将在当前父Shell脚本father.sh进程中运行（其他几种模式都会启动新的进程执行子脚本）。这是它和其他几种方法最大的区别，也是值得读者特别注意的地方。</p>
<h2>4.管道执行</h2>
<pre class="prettyprint linenums">格式：sh &lt; script或cat scripts|sh</pre>
<p>这种用法不是很常见，但有时也可以有出奇制胜的效果，例如：不用循环语句来实现精简开机自启动服务的案例，就是通过将所有字符串拼接为命令的形式，然后经由管道交给bash操作。</p>
<pre class="prettyprint linenums">chkconfig --list|grep 3:on|grep -vE "crond|sshd|network|rsyslog|sysstat"|awk '{print "chkconfig " $1 " off"}'|bash</pre>
<p>转载请注明：<a href="http://www.ywbk.cc">运维博客</a> &raquo; <a href="http://www.ywbk.cc/338.html">linux平台执行shell脚本四种方式</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ywbk.cc/338.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
