初學Linux之文本處理sed

Sed介紹;Sed用法;Sed高級用法

Sed介紹

?SED,Stream EDitor,行編輯器。
?sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。然后讀入下行,執行下一個循環。如果沒有使諸如‘D’的特殊命令,那會在兩個循環之間清空模式空間,但不會清空保留空間。這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。
?功能:主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序等。

sed和之前出現的grep、vim等文本編輯工具是不同的,vim是交互式操作的,sed是非交互式的。sed能夠根據給定的條件自動的逐行處理文件。grep也是逐行非交互的處理,grep主要是將匹配到的內容打印顯示,并沒有進行數據的更改。sed對匹配到的數據進行修改和調整,更加靈活的顯示用戶需要的內容,同時對部分內容進行更改。

sed具體的功能包括:數據的替換、刪除、新增等,這里的數據可以是一些關鍵字,也可以是一些特定的行。

Sed用法

用法:
sed [option]… ‘script’ inputfile…
?常用選項:
-n:不輸出模式空間內容到屏幕,即不自動打印
-e: 多點編輯( -e script1 -e script2 -e script3;)
-f:/PATH/SCRIPT_FILE: 從指定文件中讀取編輯腳本
-r: 支持使用擴展正則表達式
-i.bak: 備份文件并原處編輯,-i 直接修改源文件
?script:
‘地址命令’? 使用定位地址的方法,指明要操作的行,進入模式空間,腳本是必須要有的。

地址定界:
(1) 不給地址:對全文進行處理
(2) 單行定位:
#: 用數字指定的行,$:最后一行
/pattern/:被此處模式所能夠匹配到的每一行
(3) 行到行范圍定位:
n,m:都是數字定位的,表示從n到m行。
n,+m:都是數字,表示從n到 n+m行。
/pat1/,/pat2/:一般是正則表達匹配的字符串,從文本掃描時先掃描1,再掃描2,這個結束,還有文本,就重新再次掃描1,掃描到了,就操作,同時進行掃描2,若是2到結束也沒有掃描到,那就將剩下的全部操作。
#,/pat1/:第一個是數字,后面是正則表達匹配,由于行數是不會重復的,所以,會自動的到第一個匹配到的 pat1,結束。
(4) ~:步進
1~2 奇數行 ?? 從第一行開始,兩個作為一個循環,每個循環的第二個進行操作
2~2 偶數行 ? 從第二行開始,兩個作為一個循環,每個循環的第二個進行操作

編輯命令:
d: 刪除模式空間匹配的行,并立即啟用下一輪循環
p:打印當前模式空間內容,追加到默認輸出之后
a [\]text:在指定行后面追加文本
支持使用\n實現多行追加,追加是換行追加
i [\]text:在行前面插入文本
c [\]text:替換行為單行或多行文本

后續不能添加操作
w /path/somefile: 保存模式匹配的行至指定文件。若是要繼續操作,建議使用-e
r /path/somefile:讀取指定文件的文本至模式空間中。同上
匹配到的行后
=: 為模式空間中的行打印行號
!:模式空間中匹配行取反處理

s///:查找替換,支持使用其它分隔符,s@@@,s###
? ? ? ? ?? 替換標記:
g: 行內全局替換
p: 顯示替換成功的行
w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中

sed示例
?sed –n ‘2,/root/p’ /etc/passwd 從2行開始
?sed -n? ‘/^$/=’? file 顯示空行行號
?sed –n ? –e ‘/^$/p’ ? –e ‘/^$/=’ file
?sed? ‘/root/a\superman’ /etc/passwd行后
?sed? ‘/root/i\superman’? /etc/passwd 行前
?sed? ‘/root/c\superman’ /etc/passwd 代替行

sed -n -e ‘/^$/p’ -e ‘/^$/=’ /etc/fstab 和 sed -n? ‘/^$/p;/^$/=’ /etc/fstab 結果是一樣的。

使用時注意分號隔開的方法

Sed高級用法

sed 工作機制是每次讀取一行文本至“模式空間”中,在模式空間中完成處理,將處理結果輸出至標準輸出設備,在模式空間中處理一行內容后會雞西處理下一行,那么對于處理過的行可能還有其他的處理,因此可以把處理過的行“傳送”至保持空間中,然后再后續的處理中再次“傳送”回模式空間中。這樣將類似加工車間和倉庫的概念,模式空間是加工車間,保持空間是倉庫,而倉庫中存儲的是些半成品。

高級編輯命令
?P:打印模式空間開端至\n內容,并追加到默認輸出之前;
?h: 把模式空間中的內容覆蓋至保持空間中;
?H:把模式空間中的內容追加至保持空間中內容的后面;
?g: 從保持空間取出數據并覆蓋至模式空間;
?G:從保持空間取出內容并追加至模式空間;
?x: 把模式空間中的內容與保持空間中的內容進行互換;
?n: 讀取匹配到的行的下一行覆蓋至模式空間(覆蓋原有內容);已經讀取的行不會再次讀取
?N:讀取匹配到的行的下一行追加至模式空間內容后面;已經讀取的行不會再次讀取
?d: 刪除模式空間中的內容
?D:刪除模式空間中的首行。

注意:命令功能可以使用 !取反,;分號用于分隔腳本。

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/91197

(2)
hack王和juhack王和ju
上一篇 2018-01-20 16:54
下一篇 2018-01-21 20:19

相關推薦

  • MySQL/MariaDB數據庫基于SSL實現主從復制

    前言 備份數據庫是生產環境中的首要任務,重中之重,有時候不得不通過網絡進行數據庫的復制,由于MySQL/MariaDB的主從復制是明文傳送的,如果在生產環境中跨網絡傳送,數據的安全性就無法完全保證,為了解決這一問題,我們需要一種安全的方式進行傳送,即基于SSL加密進行數據傳輸。 部署配置 實驗拓撲 實驗環境 系統環境:CentOS6.6 數據庫版本:mari…

    Linux干貨 2015-06-21
  • linux上RAID的工作方式

    -. RAID是什么?     磁盤陣列(Redundant Arrays of Independent Disks,RAID),是將多塊廉價硬盤組合在一起當作一個更大的硬盤使用,利用可以同時對每個硬盤同時進行讀寫的特性提高計算機對硬盤的讀寫能力。我們甚至可以空出RAID中的一塊或多塊硬盤對整個RAID進行數據校驗,提…

    Linux干貨 2015-12-06
  • 走進Linux(一)

    一、計算機基礎 世界上第一臺計算機于1946年誕生于美國賓夕法尼亞大學,名叫:ENIAC。     計算機主要由硬件系統和軟件系統兩部分組成:     1、組成硬件的五大部分:    控制器(Control):是整個計算機的中樞神經,其功能是對程序規定的控制信息進行解釋,根據其要求進行控制,調度程序…

    Linux干貨 2016-09-22
  • yum相關知識及源碼編譯安裝http

    二.源碼編譯安裝http 獲得源碼,將源碼放在/usr/local/src下,并將其解壓縮到此目錄下 進入解壓縮文件下,查看INSTALL文件 文件內容如下 黃色區域即為安裝步驟 在當前目錄下執行./configure –prefix=/usr/local/appach2 編譯  make make install  把目標文…

    系統運維 2016-08-24
  • 馬哥教育網絡班20期+第3周課程練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 who |cut -d " " -f1 |sort -u 2、取出最后登錄到當前系統的用戶的相關信息。 [root@localhost ~]# who|tai…

    Linux干貨 2016-06-29
  • N25_第二周作業_leon

    第二周博客作業_leon 1.       Linux上的文件管理類命令有哪些?其常用的使用方法及其相關示例演示 常用文件管理類命令有: mkdir、touch、rmdir、cp、rm、mv   mkdir—-創建目錄 -m  直接設置權限(非默認權限) -v&nbs…

    Linux干貨 2016-12-23
欧美性久久久久