文本三劍客---sed 基礎

来源:http://www.cnblogs.com/Sunzz/archive/2017/07/24/7231009.html
-Advertisement-
Play Games

sed編輯器被稱作流編輯器(stream editor),和普通的互動式文本編輯器恰好相反。在互動式文本編輯器中(比如vim),你可以用鍵盤命令來互動式的插入、刪除或者替換數據中的文本。流編輯器則會自愛編輯器處理數據之前基於預習提供的一組規則來編輯數據流。 sed編輯器可以根據命令來處理數據流中的數 ...


sed編輯器被稱作流編輯器(stream editor),和普通的互動式文本編輯器恰好相反。在互動式文本編輯器中(比如vim),你可以用鍵盤命令來互動式的插入、刪除或者替換數據中的文本。流編輯器則會自愛編輯器處理數據之前基於預習提供的一組規則來編輯數據流。

sed編輯器可以根據命令來處理數據流中的數據,這些命令要麼從命令行輸入,要麼存儲在一個命令文件中。sed會執行下列操作:

(1)一次從輸入中讀取一行數據。

(2)根據所提供的編輯器命令匹配數據

(3)安裝命令修改流中的數據

(4)將新的數據輸出到STDOUT

在流編輯器將所有命令與一行數據匹配完畢後,它會讀取下一行數據並重覆這個過程。在流編輯器處理完流中的所有數據行後,它就會終止。

由於命令是按順序逐行執行的,sed編輯器只需對數據流進行以便處理就可以完成編輯操作。這使得sed編輯器要比互動式編輯器快得多,可以快速完成對數據的自動修改。

用法

sed [option]… 'script' intputfile

1 常用選項

-n:不輸出模式空間內容到屏幕,既不自動列印
-e:多點編輯
-f:/PATH/SCRIPT_FILE:從指定文件中讀取編輯腳本
-r:支持使用擴展正則表達式
-i.bak:備份文件並原處編輯

script:
"地址命令"

2 地址定界

(1)不給地址:對全文進行處理

(2)單地址:

#:指定的行

/pattern/:被此處模式所能夠匹配到的每一行

(3)地址範圍:

#,#
#,+#
/pat1/,/pat2/
#,/pat1/

(4)~:步進
1~2 奇數行
2~2 偶數行

3 基本編輯命令

d:刪除模式空間匹配的行
p:顯示模式空間中的內容
a[\]text:在指定行後面追加文本,支持使用\n實現多行追加
i[\]text:在行前面插入文本
c[\]text:替換行為單行或多行文本
w /path/somefile:保存模式匹配的行至指定文件
r /path/somefile:讀取指定文件的文本至模式空間中匹配到的行後
= :為模式空間中的行列印行號
! :模式空間中匹配行取反處理
s/oldstr/newstr/:查找替換,支持使用其它分隔符,s@@@,s###
替換標記:
    g:行內全局替換
    p:顯示替換成功的行
    w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中

4 常用命令

(1)列印第N行

[root@local ~]# sed -n '2p' /etc/passwd

bin:x:1:1:bin:/bin:/sbin/nologin

(2)列印第N至M行

[root@local ~]# sed -n '1,4p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

(3)列印所有包含關鍵字string的行

[root@local ~]# sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

(4)列印從第N行開始到有關鍵字string 的行

[root@local ~]# sed -n '1,/root/p' /etc/passwd

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

(5)顯示空行行號

[root@local ~]# sed -n '/^$/=' /etc/fstab

1

(6)在關鍵字行後追加文字

[root@local ~]# sed '/root/a\superman' /etc/passwd
root:x:0:0:root:/root:/bin/bash
superman
bin:x:1:1:bin:/bin:/sbin/nologin
[……]
operator:x:11:0:operator:/root:/sbin/nologin
superman
games:x:12:100:games:/usr/games:/sbin/nologin
[……]

(7)在關鍵字string行前追擊文字

[root@local ~]# sed '/root/i\superman' /etc/passwd
superman
root:x:0:0:root:/root:/bin/bash
[……]
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
superman
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
[……]

(8)替換行為單行或多行文本

[root@local ~]# sed '/root/c\superman' /etc/passwd
superman
bin:x:1:1:bin:/bin:/sbin/nologin
[……]
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
superman
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[……]

(9)刪除指定行

[root@local ~]# sed '1,10d' /etc/passwd
或[root@local ~]# cat -n /etc/passwd |sed '1,10d'
11    games:x:12:100:games:/usr/games:/sbin/nologin
12    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13    nobody:x:99:99:Nobody:/:/sbin/nologin
14    avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin

(10)在指定行後追加文字

[root@local ~]# nl /etc/passwd |sed '2a tea'
1    root:x:0:0:root:/root:/bin/bash
2    bin:x:1:1:bin:/bin:/sbin/nologin
tea
3    daemon:x:2:2:daemon:/sbin:/sbin/nologin

(11)在關鍵字追加文本

[root@local ~]# sed -n 's/root/&superman/p' /etc/passwd
rootsuperman:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/rootsuperman:/sbin/nologin

(12)在關鍵字前追擊文本

[root@local ~]# sed -n 's/root/superman&/p' /etc/passwd
supermanroot:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/supermanroot:/sbin/nologin

(13)全局查找替換

[root@local ~]# sed 's/UUID/hahaha/g' /etc/fstab
[……]
hahaha=227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
hahaha=7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
hahaha=12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0

(14)使用多個編輯器命令

[root@local ~]# sed -e 's/UUID/hahaha/g' -e 's/=/###/g' /etc/fstab
[……]
hahaha###227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
hahaha###7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
hahaha###12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0

(15)修改前備份

先把/etc/fstab複製到當前目錄下,以防止直接修改

[root@local ~]# cp /etc/fstab .
[root@local ~]# sed -i.bak 's/=/$$$$$/g' fstab
[root@local ~]# cat fstab fstab.bak
[……]
UUID$$$$$227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
UUID$$$$$7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
UUID$$$$$12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0
[……]
UUID=227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
UUID=7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
UUID=12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0
[root@local ~]#

(16)從文件中讀取編輯命令

[root@local ~]# cat script1.sed
s/=/$$$$/
s/UUID/mytest/

[root@local ~]# sed -f script1.sed fstab
[……]
mytest$$$$227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
mytest$$$$7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
mytest$$$$12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0

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

-Advertisement-
Play Games
更多相關文章
  • 一、MySQL數據類型 1.數值型 SMALLINT: 2個位元組 INT: 4個位元組 // age int(10) INTEGER:INT的同義詞 BIGINT : 8個位元組 FLOAT : 4個位元組 DOUBLE : 8個位元組 //score float(10,2) 2.字元串(字元)類型 CHA ...
  • 一、資料庫的基本概念 資料庫: 以一定方式儲存在一起、能為多個用戶共用、具有儘可能小的冗餘度的特點、是與應用程式彼此獨立的數據集合。 DBMS(DataBase Management System,資料庫管理系統)和資料庫。平時談到“資料庫”可能有兩種含義:MSSQLServer、Oracle等某種 ...
  • Jexus 即 Jexus Web Server,簡稱JWS,是Linux平臺上的一款ASP.NET WEB伺服器,是 Linux、Unix、FreeBSD 等非Windows系統架設 ASP.NET WEB 伺服器的核心程式,是企業級ASP.NET跨平臺部署的一種可選方案。與其它WEB伺服器相比, ...
  • gawk 程式是Unix中原始awk程式的GNU版本。gawk程式讓流編輯器邁上了一個新的臺階,它提供了一種編程語言而不只是編輯器命令。在gawk編程語言中,可以完成下麵的事情: (1)定義變數來保存數據; (2)使用算數和字元串操作符來處理數據; (3)使用結構化編程概念(比如if then語句和 ...
  • 本文目錄: 1.6.1 基本整數運算 1.6.2 bc命令高級算術運算 使用let、$(())或$[]進行基本的整數運算,使用bc進行高級的運算,包括小數運算。其中expr命令也能進行整數運算,還能判斷參數是否為整數,具體用法見expr命令全解。 1.6.1 基本整數運算 [root@xuexi t ...
  • 在一開始使用Ubuntu時還是滿興奮的,但是在多次登錄系統後發現Ubuntu有自己設置的帳號和密碼之外,還有一個“客人登錄”。細心的人就會發現客人登錄是不需要帳號和密碼的,直接點擊就能登錄。雖然說客人登錄退出後會刪除所有設置和操作,但我還是不放心。我在網上找了一些方法,終於被我找到一個比較合適的了。 ...
  • expr命令可以實現數值運算、數值或字元串比較、字元串匹配、字元串提取、字元串長度計算等功能。它還具有幾個特殊功能,判斷變數或參數是否為整數、是否為空、是否為0等。 先看expr命令的info文檔info coreutils 'expr invocation'的翻譯。 下麵將使用示例來介紹expr的 ...
  • 原文發表於cu:2016-03-11 參考文檔: 一.環境 OS CentOS6.7 x86_64 網路 Sever:192.168.1.254 Client:192.168.1.100 二.安裝與配置 1. 安裝 使用yum安裝即可:yum install vsftpd -y 2. 軟體模塊 3. ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...