Linux常用命令:sed

来源:http://www.cnblogs.com/willhua/archive/2016/09/25/5905724.html
-Advertisement-
Play Games

本文記錄的是自己在學習《Linux私房菜》中正則表達式的筆記。 關於行尾符$ 如果文件本身沒有內容,比如使用touch新建的文件,那麼$將會沒有意義。例如下麵操作: 先使用touch新建了一個test.txt文件,然後嘗試使用sed命令去在行尾增加內容,但是沒有成功(緊接著的cat命令沒有輸出任何東 ...


本文記錄的是自己在學習《Linux私房菜》中正則表達式的筆記。 

關於行尾符$

如果文件本身沒有內容,比如使用touch新建的文件,那麼$將會沒有意義。例如下麵操作:

先使用touch新建了一個test.txt文件,然後嘗試使用sed命令去在行尾增加內容,但是沒有成功(緊接著的cat命令沒有輸出任何東西),然後我使用vim給test.txt手動增加了一行內容“add by vim”,然後再使用同樣的sed命令就成功了,如後續cat命令輸出結果。

命令sed

sed是一個十分有用的管道命令,功能很多,而且都是用的比較多的場景。

sed [-nefri] [動作]

  • -n:安靜模式。預設情況下,所有向sed的stdin都會顯示在屏幕上,而若使用安靜模式,則只有經過sed特殊處理的行或者命令顯示在屏幕上
  • -e:直接在命令行模式上進行sed的動作編輯
  • -f:直接將sed的動作寫在一個文件內,-f filename則可以執行filename內的sed動作
  • -r:使sed支持擴張正則表達式語法,預設為基礎正則表達式語法
  • -i:直接修改讀取的文件內容,而不是在屏幕上輸出。預設是在屏幕上輸出,而源文件不受影響

下麵是動作說明,動作需要使用單引號‘’,且可以用兩個數字或者$來選擇進行動作的行數,‘[n1[,n2]]function’,比如'2,5d','2d','3,$d'這三種形式,分別表示選擇[2-5]行,第2行,[3-最後一行]。也可以使用正則表達式來選擇行,比如'/正則表達式/d',則將對符號正則表達式的行進行刪除動作。function有如下操作:

  • a:新增。在a的後面必須接字元串,且不能全是空格的字元串,表示在當前行的下一行寫入這些數據
  • c:替換。c的後面必須接字元串,這些字元串將替換n1,n2之間的行,即刪除行[n1,n2],然後在n1-1後面寫入這些字元串
  • d:刪除。刪除行[n1,n2]
  • i:插入。i的後面必須接字元串,這些字元串將出現當前行的上一行
  • p:列印。將選擇的數據列印出來,就是顯示在屏幕上。通常與-n一起
  • s:替換。直接進行替換工作,可以使用正則表達式,例如'1,20s/old/new/g'

關於對function的作用範圍,測試表明:

  • 若沒有選擇,即例如‘a str’,對於a,d,i,p則表示選擇所有的行。而對於c,則並不是刪除所有行,然後只增加一行str,而是把所有行都替換為str
  • 如果有選擇則,即例如‘1a str’,'1,3a str','2,$a str','$a str','/正則表達式/a str';對於a,d,i,p則表示選擇這些行進行動作。而對於c,若是使用[n1[,n2]]形式選擇的行,則刪除全部行,再增加一行str;而若是使用正則表達式選擇的行,則是把選擇的每一行都替換成str!

     

  • 若文件為空文件,那麼這些功能都將無效果,包括增加類的命令a,i

使用a來增加多行:在每一行後面都必須使用反斜杠“\”來進行新行的增加,例如:test.txt中本來只有一行:this is a test file.,然後使用a增加了三行

使用sed刪除空行:sed -i '/^$/d' filename,解釋:-i表示直接修改文件而不在屏幕上顯示,/^$/使用的是正則表達式,在正則表達式中^表示行首,$表示行尾,行尾與行首之間沒有東西則是空行,d表示刪除。

sed命令有一個查找替換功能:

sed 's/要被替換的字元串/新的字元串/g'    filename

其中,要“被替換的字元串”是使用正則表達式的,而對於“新的字元串”那肯定就是普通的字元。下麵是我做的一些測試。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.日誌類型 二進位日誌記錄了所有對mysql資料庫的修改事件,包括增刪改事件和對錶結構的修改事件。 2.配置使用二進位日誌 在my.ini 配置 log-bin=mysql-bin 2.二進位日誌格式 基於段的日誌格式 binlog_format=STATEMENT 記錄了操作的sql語句。 優點... ...
  • pt-heartbeat是用來監測主從延遲的情況的,眾所周知,傳統的通過show slave status\G命令中的Seconds_Behind_Master值來判斷主從延遲並不靠譜。 pt-heartbeat的思路比較巧妙,它在master中插入一條帶有當前時間(MySQL中的now()函數)的 ...
  • 連接查詢:通過連接運算符可以實現多個表查詢。連接是關係資料庫模型的主要特點,也是它區別於其它類型資料庫管理系統的一個標誌。 常用的兩個鏈接運算符: 1.join on 2.union 在關係資料庫管理系統中,表建立時各數據之間的關係不必確定,常把一個實體的所有信息存放在一個表中。當檢索數據時,通過連 ...
  • 1.下載mysql最新版本。 http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.15-winx64.zip 2.解壓到文件夾。 D:\software\mysql\mysql5.7a 將my-default.ini 複製為 my.ini 3.編輯... ...
  • SQL Structured Query Language(結構化查詢語句) 包含了欄位和記錄。 有多個數據表而組成的庫 E-R圖的構建步驟: 1.為每個實體建立一張表; 2.為每個表選擇一個主鍵; 3.增加外鍵以表示一對多的關係; 4.建立新表表示多對多的關係; 5.定義約束條件; 6.評價關係的 ...
  • Ubuntu keylin 14.04 如何開啟root用戶登錄 Ubuntu keylin 14.04 如何開啟root用戶登錄 Ubuntu(烏班圖)是一個以桌面應用為主的Linux操作系統。Ubuntu基於Debian發行版和GNOME桌面環境,而從11.04版起,Ubuntu發行版放棄了Gn ...
  • 練習一: 1、添加5個用戶,user1,...,user5; 2、每個用戶的密碼同用戶名,添加密碼完成後,不顯示命令的執行結果; 3、每個用戶添加完成後,都要顯示用戶某某已添加成功。 useradd user1 echo "user1" | passwd --stdin user1 &> /dev/ ...
  • 古語云,“工欲善其事,比先利其器 ”,每個行業的從業者,都有一套特定的工具以幫助他們更快速的解決問題,木匠需要鋸子、卷尺、刨子、錘子,廚師需要一套刀,剁、切、片、剔,一套勺子,炒、煎、燉、滷;就連路邊擺攤貼膜的小伙,也有一整套的的工具,剪刀、鋼尺、擦布、推膜卡;對於一個追求效率的碼農,也必須要一套工 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...