<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                在這章中,我們繼續著手于文本相關的工具,關注那些用來格式化輸出的程序,而不是改變文本自身。 這些工具通常讓文本準備就緒打印,這是我們在下一章會提到的。我們在這章中會提到的工具有: > * nl – 添加行號 > * fold – 限制文件列寬 > * fmt – 一個簡單的文本格式轉換器 > * pr – 讓文本為打印做好準備 > * printf – 格式化數據并打印出來 > * groff – 一個文件格式系統 ## 簡單的格式化工具 我們將先著眼于一些簡單的格式工具。他們都是功能單一的程序,并且做法有一點單純, 但是他們能被用于小任務并且作為腳本和管道的一部分 。 ### nl - 添加行號 nl 程序是一個相當神秘的工具,用作一個簡單的任務。它添加文件的行數。在它最簡單的用途中,它相當于 cat -n: ~~~ [me@linuxbox ~]$ nl distros.txt | head ~~~ 像 cat,nl 既能接受多個文件作為命令行參數,也能標準輸出。然而,nl 有一個相當數量的選項并支持一個簡單的標記方式去允許更多復雜的方式的計算。 nl 在計算文件行數的時候支持一個叫“邏輯頁面”的概念 。這允許nl在計算的時候去重設(再一次開始)可數的序列。用到那些選項 的時候,可以設置一個特殊的開始值,并且在某個可限定的程度上還能設置它的格式。一個邏輯頁面被進一步分為 header,body 和 footer 這樣的元素。在每一個部分中,數行數可以被重設,并且/或被設置成另外一個格式。如果nl同時處理多個文件,它會把他們當成一個單一的 文本流。文本流中的部分被一些相當古怪的標記的存在加進了文本: 每一個上述的標記元素肯定在自己的行中獨自出現。在處理完一個標記元素之后,nl 把它從文本流中刪除。 這里有一些常用的 nl 選項: 表格 22-2: 常用 nl 選項 | 選項 | 含義 | |-----|-------| | -b style | 把 body 按被要求方式數行,可以是以下方式:a = 數所有行 t = 數非空行。這是默認設置。n = 無 pregexp = 只數那些匹配了正則表達式的行 | | -f style | 將 footer 按被要求設置數。默認是無 | | -h style | 將 header 按被要求設置數。默認是 | | -i number | 將頁面增加量設置為數字。默認是一。 | | -n format | 設置數數的格式,格式可以是:ln = 左偏,沒有前導零。rn = 右偏,沒有前導零。rz = 右偏,有前導零。 | | -p | 不要在沒一個邏輯頁面的開始重設頁面數。 | | -s string | 在沒一個行的末尾加字符作分割符號。默認是單個的 tab。 | | -v number | 將每一個邏輯頁面的第一行設置成數字。默認是一。 | | -w width | 將行數的寬度設置,默認是六。 | 坦誠的說,我們大概不會那么頻繁地去數行數,但是我們能用 nl 去查看我們怎么將多個工具結合在一個去完成更復雜的任務。 我們將在之前章節的基礎上做一個 Linux 發行版的報告。因為我們將使用 nl,包含它的 header/body/footer 標記將會十分有用。 我們將把它加到上一章的 sed 腳本來做這個。使用我們的文本編輯器,我們將腳本改成一下并且把它保存成 distros-nl.sed: ~~~ # sed script to produce Linux distributions report 1 i\ \\:\\:\\:\ \ Linux Distributions Report\ \ Name Ver. Released\ ---- ---- --------\ \\:\\: s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/ $ i\ \\:\ \ End Of Report ~~~ 這個腳本現在加入了 nl 的邏輯頁面標記并且在報告的最后加了一個 footer。記得我們在我們的標記中必須兩次使用反斜杠, 因為他們通常被 sed 解釋成一個轉義字符。 下一步,我們將結合 sort, sed, nl 來生成我們改進的報告: ~~~ [me@linuxbox ~]$ sort -k 1,1 -k 2n distros.txt | sed -f distros-nl.sed | nl Linux Distributions Report Name Ver. Released ---- ---- -------- 1 Fedora 5 2006-03-20 2 Fedora 6 2006-10-24 3 Fedora 7 2007-05-31 4 Fedora 8 2007-11-08 5 Fedora 9 2008-05-13 6 Fedora 10 2008-11-25 7 SUSE 10.1 2006-05-11 8 SUSE 10.2 2006-12-07 9 SUSE 10.3 2007-10-04 10 SUSE 11.0 2008-06-19 11 Ubuntu 6.06 2006-06-01 12 Ubuntu 6.10 2006-10-26 13 Ubuntu 7.04 2007-04-19 14 Ubuntu 7.10 2007-10-18 15 Ubuntu 8.04 2008-04-24 End Of Report ~~~ 我們的報告是一串命令的結果,首先,我們給名單按發行版本和版本號(表格1和2處)進行排序,然后我們用 sed 生產結果, 增加了 header(包括了為 nl 增加的邏輯頁面標記)和 footer。最后,我們按默認用 nl 生成了結果,只數了屬于邏輯頁面的 body 部分的 文本流的行數。 我們能夠重復命令并且實驗不同的 nl 選項。一些有趣的方式: ~~~ nl -n rz ~~~ 和 ~~~ nl -w 3 -s ' ' ~~~ ### fold - 限制文件行寬 折疊是將文本的行限制到特定的寬的過程。像我們的其他命令,fold 接受一個或多個文件及標準輸入。如果我們將 一個簡單的文本流 fold,我們可以看到它工具的方式: ~~~ [me@linuxbox ~]$ echo "The quick brown fox jumped over the lazy dog." | fold -w 12 The quick br own fox jump ed over the lazy dog. ~~~ 這里我們看到了 fold 的行為。這個用 echo 命令發送的文本用 -w 選項分解成塊。在這個例子中,我們設定了行寬為12個字符。 如果沒有字符設置,默認是80。注意到文本行不會因為單詞邊界而不會被分解。增加的 -s 選項將讓 fold 分解到最后可用的空白 字符,即會考慮單詞邊界。 ~~~ [me@linuxbox ~]$ echo "The quick brown fox jumped over the lazy dog." | fold -w 12 -s The quick brown fox jumped over the lazy dog. ~~~ ### fmt - 一個簡單的文本格式器 fmt 程序同樣折疊文本,外加很多功能。它接受文本或標準輸入并且在文本流上呈現照片轉換。基礎來說,他填補并且將文本粘帖在 一起并且保留了空白符和縮進。 為了解釋,我們將需要一些文本。讓我們抄一些 fmt 主頁上的東西吧: 我們將把這段文本復制進我們的文本編輯器并且保存文件名為 fmt-info.txt。現在,讓我們重新格式這個文本并且讓它成為一個50 個字符寬的項目。我們能用 -w 選項對文件進行處理: ~~~ [me@linuxbox ~]$ fmt -w 50 fmt-info.txt | head 'fmt' reads from the specified FILE arguments (or standard input if none are given), and writes to standard output. By default, blank lines, spaces between words, and indentation are preserved in the output; successive input lines with different indentation are not joined; tabs are expanded on input and introduced on output. ~~~ 好,這真是一個奇怪的結果。大概我們應該認真的閱讀這段文本,因為它恰好解釋了發生了什么: 默認來說,空白行,單詞間距,還有縮進都會在輸出中保留;持續輸入不同的縮進的流不會被結合;tabs被用來擴展 輸入并且引入輸出。 所以,fmt 保留了第一行的縮進。幸運的是,fmt 提供一個修正這個的選項: 好多了。通過加了 -c 選項,我們現在有了我們想要的結果。 fmt 有一些有趣的選項: -p 選項特別有趣。通過它,我們可以格式文件選中的部分,通過在開頭使用一樣的符號。 很多編程語言使用錨標記(#)去提醒注釋的開始,而且它可以通過這個選項來被格式。讓我們創建一個有用到注釋的程序。 ~~~ [me@linuxbox ~]$ cat > fmt-code.txt # This file contains code with comments. # This line is a comment. # Followed by another comment line. # And another. This, on the other hand, is a line of code. And another line of code. And another. ~~~ 我們的示例文件包含了用 “#” 開始的注釋(一個 # 后跟著一個空白符)和代碼。現在,使用 fmt,我們能格式注釋并且 不讓代碼被觸及。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看