
- Sed 教程
- Sed - 首頁
- Sed - 概述
- Sed - 環境
- Sed - 工作流程
- Sed - 基本語法
- Sed - 迴圈
- Sed - 分支
- Sed - 模式緩衝區
- Sed - 模式範圍
- Sed - 基本命令
- Sed - 特殊字元
- Sed - 字串
- Sed - 模式管理
- Sed - 正則表示式
- Sed - 實用技巧
- Sed 有用資源
- Sed - 快速指南
- Sed - 有用資源
- Sed - 討論
流編輯器 - 迴圈
像其他程式語言一樣,SED 也提供了迴圈和分支功能來控制執行流程。在本章中,我們將進一步探討如何在 SED 中使用迴圈和分支。
SED 中的迴圈類似於goto語句。SED 可以跳轉到標記為標籤的行,並繼續執行剩餘的命令。在 SED 中,我們可以定義標籤如下
:label :start :end :up
在上面的例子中,冒號(:)後面的名稱表示標籤名稱。
要跳轉到特定標籤,我們可以使用b命令,後跟標籤名稱。如果省略標籤名稱,則 SED 將跳轉到 SED 檔案的末尾。
讓我們編寫一個簡單的 SED 指令碼,以瞭解迴圈和分支。在我們的 books.txt 檔案中,有幾個書籍標題及其作者的條目。以下示例將書籍標題及其作者名稱組合在一行中,並用逗號分隔。然後它搜尋模式“Paulo”。如果模式匹配,它會在行前列印一個連字元 (-),否則它會跳轉到Print標籤,該標籤列印該行。
[jerry]$ sed -n ' h;n;H;x s/\n/, / /Paulo/!b Print s/^/- / :Print p' books.txt
執行上述程式碼後,您將獲得以下結果
A Storm of Swords, George R. R. Martin The Two Towers, J. R. R. Tolkien - The Alchemist, Paulo Coelho The Fellowship of the Ring, J. R. R. Tolkien - The Pilgrimage, Paulo Coelho
A Game of Thrones, George R. R. Martin
乍一看,上面的指令碼可能看起來很神秘。讓我們來揭開它。
前兩個命令h;n;H;x 和 s/\n/, / 很容易理解,它們將書籍標題和作者用逗號 (,) 分隔組合在一起。
第三個命令僅在模式不匹配時跳轉到標籤Print,否則第四個命令執行替換。
:Print只是一個標籤名稱,如您所知,p是列印命令。
為了提高可讀性,每個 SED 命令都放在單獨一行。但是,可以選擇將所有命令放在一行中,如下所示
[jerry]$ sed -n 'h;n;H;x;s/\n/, /;/Paulo/!b Print; s/^/- /; :Print;p' books.txt
執行上述程式碼後,您將獲得以下結果
A Storm of Swords, George R. R. Martin The Two Towers, J. R. R. Tolkien - The Alchemist, Paulo Coelho The Fellowship of the Ring, J. R. R. Tolkien - The Pilgrimage, Paulo Coelho A Game of Thrones, George R. R. Martin
廣告