王高文具 發表於 2024-1-20 00:00:00

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]
查看完整版本: Linux shell tr 命令详解