Linux shell tr 命令详解
<p><strong>Linux shell tr 命令详解</strong></p>
<p>
<strong>1. 用途</strong></p>
<p>
tr,translate的简写,主要用于压缩重复字符,删除文件中的控制字符以及进行字符转换操作。</p>
<p>
<strong>2. 语法</strong></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_321073">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">tr</code> <code class="bash plain">... SET1 </code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<strong>3. 参数</strong></p>
<p>
3.1 -s 压缩重复字符</p>
<p>
-s: squeeze-repeats,用SET1指定的字符来替换对应的重复字符 (replace each input sequence of a repeated character that is listed in SET1 with a single occurrence of that character)</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_649093">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">xiaosi@Qunar:~</code><code class="bash plain">/test</code><code class="bash plain">$ </code><code class="bash functions">echo</code> <code class="bash string">"aaabbbaacccfddd"</code> <code class="bash plain">| </code><code class="bash functions">tr</code> <code class="bash plain">-s </code><code class="bash plain">//</code> <code class="bash plain">abacfd</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
可以使用这一特点,删除文件中的空白行,实质上跟上面一样,都是用SET1指定的字符来替换对应的重复字符</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_129100">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">xiaosi@Qunar:~</code><code class="bash plain">/test</code><code class="bash plain">$ </code><code class="bash functions">cat</code> <code class="bash plain">b.txt</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">I like football</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">Football is very fun!</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash plain">Hello</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash plain">xiaosi@Qunar:~</code><code class="bash plain">/test</code><code class="bash plain">$ </code><code class="bash functions">cat</code> <code class="bash plain">b.txt | </code><code class="bash functions">tr</code> <code class="bash plain">-s [</code><code class="bash string">"\n"</code><code class="bash plain">]</code>
</div>
<div class="line number6 index5 alt1">
<code class="bash plain">I like football</code>
</div>
<div class="line number7 index6 alt2">
<code class="bash plain">Football is very fun!</code>
</div>
<div class="line number8 index7 alt1">
<code class="bash plain">Hello</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<strong>3.2 -d 删除字符</strong></p>
<p>
-d:delete,删除SET1中指定的所有字符,不转换(delete characters in SET1, do not translate)</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_843719">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">xiaosi@Qunar:~</code><code class="bash plain">/test</code><code class="bash plain">$ </code><code class="bash functions">echo</code> <code class="bash string">"a12HJ13fdaADff"</code> <code class="bash plain">| </code><code class="bash functions">tr</code> <code class="bash plain">-d </code><code class="bash string">""</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">1213</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">xiaosi@Qunar:~</code><code class="bash plain">/test</code><code class="bash plain">$ </code><code class="bash functions">echo</code> <code class="bash string">"a1213fdasf"</code> <code class="bash plain">| </code><code class="bash functions">tr</code> <code class="bash plain">-d </code>
</div>
<div class="line number4 index3 alt1">
<code class="bash plain">1213</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
3.3 字符替换</p>
<p>
-t:truncate,将SET1中字符用SET2对应位置的字符进行替换,一般缺省为-t</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_235062">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">xiaosi@Qunar:~</code><code class="bash plain">/test</code><code class="bash plain">$ </code><code class="bash functions">echo</code> <code class="bash string">"a1213fdasf"</code> <code class="bash plain">| </code><code class="bash functions">tr</code> <code class="bash plain">-t </code><code class="bash plain">//</code> <code class="bash plain">A1213FOAsF</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
上述代码将a转换为A,f转换为F,d转换为O。</p>
<p>
可以利用这一特点,实现大小字母的转换</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterjava" id="highlighter_411657">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="java plain">xiaosi</code><code class="java color1">@Qunar</code><code class="java plain">:~/test$ echo </code><code class="java string">"Hello World I Love You"</code> <code class="java plain">|tr -t </code>
</div>
<div class="line number2 index1 alt1">
<code class="java plain">HELLO WORLD I LOVE YOU</code>
</div>
<div class="line number3 index2 alt2">
<code class="java plain">xiaosi</code><code class="java color1">@Qunar</code><code class="java plain">:~/test$ echo </code><code class="java string">"HELLO WORLD I LOVE YOU"</code> <code class="java plain">|tr -t </code>
</div>
<div class="line number4 index3 alt1">
<code class="java plain">hello world i love you</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
也可以利用字符集合进行转换</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterjava" id="highlighter_415851">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="java plain">xiaosi</code><code class="java color1">@Qunar</code><code class="java plain">:~/test$ echo </code><code class="java string">"Hello World I Love You"</code> <code class="java plain">|tr -t [:lower:] [:upper:]</code>
</div>
<div class="line number2 index1 alt1">
<code class="java plain">HELLO WORLD I LOVE YOU</code>
</div>
<div class="line number3 index2 alt2">
<code class="java plain">xiaosi</code><code class="java color1">@Qunar</code><code class="java plain">:~/test$ echo </code><code class="java string">"HELLO WORLD I LOVE YOU"</code> <code class="java plain">|tr -t [:upper:] [:lower:]</code>
</div>
<div class="line number4 index3 alt1">
<code class="java plain">hello world i love you</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<strong>备注:</strong></p>
<p>
字符集合如下</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_521069">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">\NNN 八进制值的字符 NNN (1 to 3 为八进制值的字符)</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">\\ 反斜杠</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">\a Ctrl-G 铃声</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash plain">\b Ctrl-H 退格符</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash plain">\f Ctrl-L 走行换页</code>
</div>
<div class="line number6 index5 alt1">
<code class="bash plain">\n Ctrl-J 新行</code>
</div>
<div class="line number7 index6 alt2">
<code class="bash plain">\r Ctrl-M 回车</code>
</div>
<div class="line number8 index7 alt1">
<code class="bash plain">\t Ctrl-I tab键</code>
</div>
<div class="line number9 index8 alt2">
<code class="bash plain">\</code><code class="bash functions">v</code> <code class="bash plain">Ctrl-X 水平制表符</code>
</div>
<div class="line number10 index9 alt1">
<code class="bash plain">CHAR1-CHAR2 从CHAR1 到 CHAR2的所有字符按照ASCII字符的顺序</code>
</div>
<div class="line number11 index10 alt2">
<code class="bash plain"> </code><code class="bash keyword">in</code> <code class="bash plain">SET2, copies of CHAR </code><code class="bash keyword">until</code> <code class="bash plain">length of SET1</code>
</div>
<div class="line number12 index11 alt1">
<code class="bash plain"> REPEAT copies of CHAR, REPEAT octal </code><code class="bash keyword">if</code> <code class="bash plain">starting with 0</code>
</div>
<div class="line number13 index12 alt2">
<code class="bash plain">[:alnum:] 所有的字母和数字</code>
</div>
<div class="line number14 index13 alt1">
<code class="bash plain">[:alpha:] 所有字母</code>
</div>
<div class="line number15 index14 alt2">
<code class="bash plain">[:blank:] 水平制表符,空白等</code>
</div>
<div class="line number16 index15 alt1">
<code class="bash plain">[:cntrl:] 所有控制字符</code>
</div>
<div class="line number17 index16 alt2">
<code class="bash plain">[:digit:] 所有的数字</code>
</div>
<div class="line number18 index17 alt1">
<code class="bash plain">[:graph:] 所有可打印字符,不包括空格</code>
</div>
<div class="line number19 index18 alt2">
<code class="bash plain">[:lower:] 所有的小写字符</code>
</div>
<div class="line number20 index19 alt1">
<code class="bash plain">[:print:] 所有可打印字符,包括空格</code>
</div>
<div class="line number21 index20 alt2">
<code class="bash plain">[:punct:] 所有的标点字符</code>
</div>
<div class="line number22 index21 alt1">
<code class="bash plain">[:space:] 所有的横向或纵向的空白</code>
</div>
<div class="line number23 index22 alt2">
<code class="bash plain">[:upper:] 所有大写字母</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<strong>3.4 字符补集替换</strong></p>
<p>
-c:complement,用SET2替换SET1中没有包含的字符</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_590536">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">xiaosi@Qunar:~</code><code class="bash plain">/test</code><code class="bash plain">$ </code><code class="bash functions">cat</code> <code class="bash plain">a.txt</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">Monday 09:00</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">Tuesday 09:10</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash plain">Wednesday 10:11</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash plain">Thursday 11:30</code>
</div>
<div class="line number6 index5 alt1">
<code class="bash plain">Friday 08:00</code>
</div>
<div class="line number7 index6 alt2">
<code class="bash plain">Saturday 07:40</code>
</div>
<div class="line number8 index7 alt1">
<code class="bash plain">Sunday 10:00</code>
</div>
<div class="line number9 index8 alt2">
<code class="bash plain">xiaosi@Qunar:~</code><code class="bash plain">/test</code><code class="bash plain">$ </code><code class="bash functions">cat</code> <code class="bash plain">a.txt | </code><code class="bash functions">tr</code> <code class="bash plain">-c </code><code class="bash string">""</code> <code class="bash string">"#"</code> <code class="bash plain">| </code><code class="bash functions">tr</code> <code class="bash plain">-s </code><code class="bash string">"#"</code> <code class="bash plain">| </code><code class="bash functions">tr</code> <code class="bash plain">-t </code><code class="bash string">"#"</code> <code class="bash string">"\n"</code>
</div>
<div class="line number10 index9 alt1">
<code class="bash plain">Monday</code>
</div>
<div class="line number11 index10 alt2">
<code class="bash plain">Tuesday</code>
</div>
<div class="line number12 index11 alt1">
<code class="bash plain">Wednesday</code>
</div>
<div class="line number13 index12 alt2">
<code class="bash plain">Thursday</code>
</div>
<div class="line number14 index13 alt1">
<code class="bash plain">Friday</code>
</div>
<div class="line number15 index14 alt2">
<code class="bash plain">Saturday</code>
</div>
<div class="line number16 index15 alt1">
<code class="bash plain">Sunday</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
上面代码中 tr -c "" "#" 表示将除大小字母以外的所有的字符都替换为#。</p>
<p>
上面代码可优化为:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_307109">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">xiaosi@Qunar:~</code><code class="bash plain">/test</code><code class="bash plain">$ </code><code class="bash functions">cat</code> <code class="bash plain">a.txt | </code><code class="bash functions">tr</code> <code class="bash plain">-cs </code><code class="bash string">""</code> <code class="bash string">"\n"</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">Monday</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">Tuesday</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash plain">Wednesday</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash plain">Thursday</code>
</div>
<div class="line number6 index5 alt1">
<code class="bash plain">Friday</code>
</div>
<div class="line number7 index6 alt2">
<code class="bash plain">Saturday</code>
</div>
<div class="line number8 index7 alt1">
<code class="bash plain">Sunday</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!</p>
<p>
原文链接:http://blog.csdn.net/sunnyyoona/article/details/52986893</p>
頁:
[1]