文本三劍客之sed

我們知道,sed被稱為Linux中被稱為文本處理三劍客之一,相比于grep命令匹配內容的功能,sed則能夠做到對匹配到的文本內容對其進行編輯。

timg_image&quality=80&size=b9999_10000&sec=1524382148&di=60ed062083583003b69f3b1

強大的處理文本的工具sed

我們知道,sed被稱為Linux中被稱為文本處理三劍客之一,相比于grep命令匹配內容的功能,sed則能夠做到對匹配到的文本內容對其進行編輯。

Linux文本處理三劍客:

grep:文本過濾工具(傳送門)

sed:文本編輯工具

awk:Linux上的實現gawk,文本報告生成器(傳送門)

 

sed,英文全稱Stream EDitor,翻譯過來就是行編輯器。

用法:

sed[option]…’script’ inputfile…

其中‘script’可表示為’地址定界+編輯命令’

option:

-n? 取消默認打印內容到屏幕(示例1)

-e???? 多點編輯,表達且關系,與grep的-e不同,grep -e表達或關系(示例2)

-f????? 從指定文件中讀取編輯腳本(示例3)

-r????? 支持使用擴展正則表達式

-i.bak?????? 原處編輯,并備份文件file.bak(示例4)

 

地址定界:

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

(2)單地址:

#:指定的行,$:最后一行

/pattern/:支持正則表達式,被此模式所能匹配到的每一行

(3)地址范圍:

#,# ? ? ? ? ? ? ? ? ? ? ? ? (示例5)

#,+#

/pat1/,/pat2/ ? ? ? ? ?(示例6)

/pat1/, # ? ? ? ? ? ? ? ? ?(示例7)

(4)~:步進

1~2? 奇數行 ? ? ? ? ? ? ?(示例5)

2~2? 偶數行

 

 

編輯命令:

d?????? 刪除模式空間匹配的行(示例4)

p?????? 打印當前模式空間內容,追加到默認輸出之后(示例1)

a[\]text?? 在指定行后面追加文本(示例4)

如要實現插入內容空格開頭可先追加\再輸入空格

支持使用\n實現多行追加(示例8)

i[\]text???? 在指定行前面插入文本(示例9)

c[\]text??? 替換指定行尾單行或多行文本(示例10)

w /path/somefile?? 保存模式匹配的行到指定文件(示例11)

r /path/somefile???? 讀取指定文件的文本匹配的行后(示例12)

注意:w,r后跟文件一定要加空格

可利用此命令定義別名到.bashrc

=?????? 為模式空間中的行打印行號

!??? 取反,!需加載地址定界和編輯命令中間,如’2!d’(示例13)

 

s///:查找替換,支持使用其他分隔符;s###;s@@@(示例14)

 

示例

以下我們創建文件test進行示例:

創建文件test

 

示例1:sed ? ‘1,10p’ /data/test.sed

sed命令默認將文本內容打印到屏幕,由于執行命令p,文本內容被打印了兩遍

不加-n

sed ?-n ?‘1,10p’ /data/test.sed

sed ? -n選項將取消默認輸出到屏幕,僅顯示p的執行結果

加-n

示例2:sed -n -e ‘1p’ ?-e ?‘3p’

顯示第一行和第三行,-e表示且的關系

-e

示例3:sed -n -f sedscripts.txt ?/data/test.sed

將2,5p寫入sedscripts.txt文件,-f選項讀取sedscripts.txt,并執行文件中內容

-f 引用文件

示例4:sed -i ?‘1,10a#’ ? /data/test.sed

表示在第1至第10行內容后插入#,-i選項直接編輯了test.sed的文本內容

-i a

sed -i ?‘/#/d’ ?/data/test.sed

表示將所有帶#的行刪掉并編輯文本

-i d

示例5:sed -n ?‘3p’ ? ? 打印第3行內容

sed ?-n ‘2,5p’ ? ? ? ? ? ? ? ?打印第2至第五行

sed ?-n ‘2,+3p’ ? ? ? ? ? ? ?打印第2至第5行

sed ?-n ?‘1~2p’ ? ? ? ? ? ? ?打印奇數行

sed ?-n ?‘2~2p’ ? ? ? ? ? ? ?打印偶數行

數字定界

示例6:正則定界,表示ifconfig命令輸出中開頭eth2的行,至開頭為lo的行

正則定界

示例7:正則數字混合定界,表示ifconfig命令輸出中,eth2開頭的行到第12行的內容

正則數字混合定界

示例8:多行插入,將aaa\nbbb插入到每行后面

a多行

示例9:sed ?‘1,10i#’ ?/data/test.sed

在每一行上面插入#

i上方插入

示例10:sed ?‘1,5c’ ?/data/test.sed

將test.sed文件中1到5行替換為一個#

c替換匹配

示例11:sed ?‘2,5w ?f1’ ?/data/test.sed

將test.sed文件中第2到第5行內容打印到f1文件中

w 將匹配內容輸出到指定文件

示例12:sed ?‘2,5r ?f1’ ?/data/test.sed

將f1的內容插入到第2至第5行

r 跟文件寫入匹配行

示例13:sed ?-n ?‘2,5! ?p’ ?/data/test.sed

打印除了第2至第5行的內容

!除了

示例14:ifconfig |sed -n “2p”|sed -r “s@.*addr:(.*) Bcast.*@\1@”

利用搜索替代,我們可以將任意段字符串定義成方法,然后表示出整行,再利用后向引用即可取出該字符串。

正則取IP

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

(0)
wangxczwangxcz
上一篇 2018-04-15 14:39
下一篇 2018-04-15 15:09

相關推薦

  • 三劍客 sed

    三劍客之一

    Linux筆記 2018-08-07
  • yum庫

    yum一個可以解決包依賴的神奇命令

    2018-04-19
  • 初涉sed命令

    零散知識點散記和sed基礎接觸

    Linux筆記 2018-04-15
  • linux基礎篇

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。
    2、bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容及其示例演示。
    3、請使用命令行展開功能來完成以下練習:
    (1)、創建/tmp目錄下的:a_c, a_d, b_c, b_d
    (2)、創建/tmp/mylinux目錄下的:
    mylinux/
    ├── bin
    ├── boot
    │ └── grub
    ├── dev
    ├── etc
    │ ├── rc.d
    │ │ └── init.d
    │ └── sysconfig
    │ └── network-scripts
    ├── lib
    │ └── modules
    ├── lib64
    ├── proc
    ├── sbin
    ├── sys
    ├── tmp
    ├── usr
    │ └── local
    │ ├── bin
    │ └── sbin
    └── var
    ├── lock
    ├── log
    └── run

    2018-05-20
  • CentOS10.5安裝過程詳解

    回顧下CentOS10.5版本的安裝,鞏固學習內容。

    2018-07-22
  • 權限管理(接上篇)

    本文主要介紹:1、文件的屬性 2、特殊權限:SUID、SGID、Sticky 3、訪問控制列表ACL

    2018-04-15
欧美性久久久久