Sed命令

Sed是一種在線編輯器、行編輯器,一次處理一行內容。sed自己也是一個管道命令,能夠分享standard input 的,並且sed還能夠將數據進行替換、刪除、新增、選取特定行等的功能呢。正則表達式

          選項介紹bash

sed [-nefr] [動做]編輯器

-n:使用安靜模式。在通常sed的用法中,全部來自stdin的數據通常都會列出屏幕上,但若是加上-n參數後,則只有通過sed特殊處理的那一行纔會被列出來。ide

-e:直接在命令行模式上進行sed的動做編輯spa

-f:直接將sed的動做寫在一個文件內,-f filename 則能夠執行filename內的sed動做命令行

-r:sed的動做支持的是擴展正則表達式的語法(默認是基礎正則表達式語法)orm

-i:直接修改讀取的文件內容,而不是由屏幕輸出。ip


動做說明: [n1[,n2]]function字符串

n1,n2:不見得會存在,通常表明選擇進行動做的行數,舉例來講,若是個人動做是須要在10到20行之間進行的,則「10,20[動做行爲]input


a:新增,a的後面能夠接字符串,而這些字符串在新的一行出現(目前的下一行)

c:替換,c後面的能夠接字符串,這些字符串能夠替換n1,n2之間的行!

d:刪除,由於是刪除,因此d後面一般不跟任何參數;

i:插入,i的後面能夠接字符串,而這些字符串戶在新的一行出現(目前的上一行)「

p:打印,也就是將某個選擇的數據打印出來,一般p會與參數 sed -n 一塊兒運行;

s:替換,能夠直接進行替換的工做。一般這個s的動做能夠搭配

範例1,將/etc/passwd的內容列出並打印行號,同時,請將第2~5行刪除。

[root@localhost ~]# nl /etc/passwd | sed '2,5d'

     1root:x:0:0:root:/root:/bin/bash

     6sync:x:5:0:sync:/sbin:/bin/sync

     7shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

     8halt:x:7:0:halt:/sbin:/sbin/halt

看到了吧?sed的動做爲‘2,5d’,那個d就是刪除。由於2~5都被刪除了,顯示的數據就沒它們了,另外,本來應該執行sed -e 纔對 沒有 -e 也行,注意後面sed 格式 ‘ ’。

刪除單行就sed ‘#d’ #號表示你刪除的第幾行,要是從第3行刪除到行尾,就sed ‘3,$d'

$表明的是最後一行。


例2.我要在第2行後面加上,hello word,怎麼辦?

[root@localhost ~]# sed '2a hello word' < /etc/passwd

root:x:0:0:root:/root:/bin/bash

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

hello word

daemon:x:2:2:daemon:/sbin:/sbin/nologin

標準輸出給sed,2a就是要在第2行後面添加,hello word,把2a換成2i就表示在第二行的前面添加。

例3 。咱們還能夠添加多行在裏面。

[root@localhost ~]# nl /etc/passwd | sed '2a sunwukeng\nzhuba\ntangdoudou\nshasha'

     1root:x:0:0:root:/root:/bin/bash

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

sunwukeng

zhuba

tangdoudou

shasha

要換行就\n;

以行爲單位的替換與顯示功能

例4.我想將2~5行的內容換成"four to kill"請看下面

[root@localhost ~]# nl /etc/passwd | sed '2,5c four to kill'

     1root:x:0:0:root:/root:/bin/bash

four to kill

     6sync:x:5:0:sync:/sbin:/bin/sync

看見嗎?我來次4殺,2到5 c表示替換,後面的內容,,

例5.咱們還能夠打印想要的行,我想要第6行,

[root@localhost ~]# nl /etc/passwd | sed -n '6p'

     6sync:x:5:0:sync:/sbin:/bin/sync

這要加-n的,表示安靜,不加-n,會打印全文,打印2次6行,,這樣你就很鬧騰,,

部分數據的查找並替換的功能,、

除了整行的處理模式以外,sed還能夠用行爲單位進行部分數據的查找並替換功能,基本上sed的查找與替換與vi相相似,它像這樣子滴:

sed  's/要被替換的字符/被替換的字符/g'

 ///或者###或者@@@  s是搜索, g在全文,

例6.取出ip地址,下面我用grep ,sed,

[root@localhost ~]# ifconfig | grep "netmask" | sed 's/^.*inet[[:space:]]*//g' | sed\ 's/[[:alpha:]].*//g'

127.0.0.1  

192.168.122.1  

找出帶有ip地址的行,而後,就sed替換,這都是套路,把不用的統統替換沒有,刪除,

例7,直接修改文件內容;

你覺得sed只會這樣的功能嗎?大聲說no,sed能夠直接修改文件的內容,而沒必要使用管道命令或數據流重定向。不過這個操做會直接修改文件,全部要慎重,不要拿系統配置文件搞,

[root@localhost ~]# sed -i 's@^@#&@g' /root/bin/4c.sh 

[root@localhost ~]# cat /root/bin/4c.sh

##!/bin/bash

#

#if [ $1 == '--add' ];then

#    for I in `echo $2 | sed 's/,/ /g'`;do

#        if id $I &> /dev/null;then

#        echo "existing"

#        else

#        useradd $I

#    echo "$I" | passwd --stdin $I &> /dev/null

#        echo "finished"

#      fi

#      done

#elif [ $1 == '--del' ];then

#    for I in `echo $2 | sed 's/,/ /g'`;do

#     if id $I &> /dev/null;then

#      userdel -r $I

#      echo "deleting completed"

#      fi

#     done

#else

#    echo "-NOT"

#fi

[root@localhost ~]# 

相關文章
相關標籤/搜索