shell程式設計(四)| sed 正規表示式

Minza發表於2018-06-21

sed

一,sed概述

sed行編輯器
stream editor
用來操作純 ASCII 碼的文字
處理時,把當前處理的行儲存在臨時緩衝區中,稱為“模式空間”(pattern space),可以指定僅僅處理哪些行
sed處理完成之後把緩衝區的內容送往螢幕,接著處理下一行,這樣不斷重複, 直到檔案末尾
sed符合條件的處理,不符合條件的不予處理,檔案內容並沒有 改變,除非用重定向儲存輸出
二,呼叫 sed 命令有兩種形式:
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)

三,多種操作模式

p 顯示   d 刪除    a 新增   c 替換   w 寫入    i 插入

1,p 模式操作

-n 只列出結果sed特殊處理的那一行,不顯示原來那一行

-e 多重編輯

sed -n '/^#/p' fstab     表示顯示以#開頭的行

sed -n '/^#/!p' fstab     表示以#開頭的行不顯示

sed -n '/0$/!p' fstab      表示以0結尾的行不顯示

sed -n '/0$/p' fstab       表示顯示以0結尾結尾的行


  1. [root@100 mnt]# cat -n fstab   
  2.      1    
  3.      2  #  
  4.      3  # /etc/fstab  
  5.      4  # Created by anaconda on Wed May  7 01:22:57 2014  
  6.      5  #  
  7.      6  UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1  
  8.      7  /dev/sda /iscsidisk xfs defaults,_netdev 0 0  
  9. [root@100 mnt]# cat -n fstab | sed -n '2,6p'                       >>>>>>>>顯示第2到6行  
  10.      2  #  
  11.      3  # /etc/fstab  
  12.      4  # Created by anaconda on Wed May  7 01:22:57 2014  
  13.      5  #  
  14.      6  UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1  
  15. [root@100 mnt]# cat -n fstab | sed -n -e '2p' -e '6p'             >>>>>>>>顯示第2和第6行  
  16.      2  #  
  17.      6  UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1  
  18. [root@100 mnt]# cat -n fstab | sed -n -e '2p;6p'                  >>>>>>>>顯示第2和第6行   這裡把上一條合併了  
  19.      2  #  
  20.      6  UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1  
  21. [root@100 mnt]# cat -n fstab | sed -n '2p;6p'                     >>>>>>>顯示第2和第6行  
  22.      2  #  
  23.      6  UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1  

sed -n -e '2!p'  fstab    表示第二行不顯示

sed -n -e '2,5!p'  fstab  表示第2到5行不現實

  1. [root@100 mnt]# cat -n fstab | sed -n -e '2!p'  
  2.      1    
  3.      3  # /etc/fstab  
  4.      4  # Created by anaconda on Wed May  7 01:22:57 2014  
  5.      5  #  
  6.      6  UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1  
  7.      7  /dev/sda /iscsidisk xfs defaults,_netdev 0 0  
  8. [root@100 mnt]# cat -n fstab | sed -n -e '2,5!p'  
  9.      1    
  10.      6  UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1  
  11.      7  /dev/sda /iscsidisk xfs defaults,_netdev 0 0  

sed -n -e '2!p;6!p' | uniq -d  fstab   表示第2,6行不顯示

sed -n -e  '2!p;6!p' uniq -u  fstab     表示只顯示第2,6行

  1. [root@100 mnt]# cat -n fstab | sed -n -e '2!p;6!p'                  >>>>>會有重複的,但是第2行和第6行沒有重複  
  2.      1    
  3.      1    
  4.      2  #  
  5.      3  # /etc/fstab  
  6.      3  # /etc/fstab  
  7.      4  # Created by anaconda on Wed May  7 01:22:57 2014  
  8.      4  # Created by anaconda on Wed May  7 01:22:57 2014  
  9.      5  #  
  10.      5  #  
  11.      6  UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1  
  12.      7  /dev/sda /iscsidisk xfs defaults,_netdev 0 0  
  13.      7  /dev/sda /iscsidisk xfs defaults,_netdev 0 0  
  14. [root@100 mnt]# cat -n fstab | sed -n -e '2!p;6!p' | uniq -d        >>>>>>uniq -d表示顯示重複的行 -d=--repeated  
  15.      1    
  16.      3  # /etc/fstab  
  17.      4  # Created by anaconda on Wed May  7 01:22:57 2014  
  18.      5  #  
  19.      7  /dev/sda /iscsidisk xfs defaults,_netdev 0 0  
  20. [root@100 mnt]# cat -n fstab | sed -n -e '2!p;6!p' | uniq -u        >>>>>>uniq -u表示顯示不重複的行 -u=--unique  
  21.      2  #  
  22.      6  UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1  

練習

給定userfile和passfile,批量建立使用者

  1. [root@100 mnt]# cat userfile   
  2. user1  
  3. user2  
  4. user3  
  5. [root@100 mnt]# cat passwdfile   
  6. user1123  
  7. user2123  
  8. user3123  
  9. [root@100 mnt]# cat user.sh   
  10. #################################  
  11. # Author:           Minz        #  
  12. # Version:                      #  
  13. # Mail:           zmxxx@163.com #  
  14. # Date:        2018-06-19       #  
  15. # Description                   #  
  16. #                               #  
  17. #################################  
  18.   
  19. #!/bin/bas  
  20. NUM=$( echo `wc -l userfile` | cut -d " " -f 1 )  >>>>確定使用者數  
  21. for i in `seq 1 $NUM `                            >>>>seq 從1開始遞增  
  22. do  
  23.     USERNAME=`sed -n "${i}p" userfile`  
  24.     PASSWORD=`sed -n "${i}p" passwdfile`  
  25.     useradd $USERNAME  
  26.     echo $PASSWORD | passwd --stdin  $USERNAME  
  27. done  
  28.   
  29. 測試  
  30. [root@100 mnt]# sh user.sh   
  31. Changing password for user user1.  
  32. passwd: all authentication tokens updated successfully.  
  33. Changing password for user user2.  
  34. passwd: all authentication tokens updated successfully.  
  35. Changing password for user user3.  
  36. passwd: all authentication tokens updated successfully.  

2,d模式

sed -e '2d;6d' fstab   表示第2行,第6行刪除

sed -e '2,6d' fstab     表示第2到6行刪除

sed -e '/^#/d' fstab   表示刪除以#開頭的行

sed -e '/^$/d;/^#/d' fstab   表示刪除空行並且以#開頭的行     ^$表示首尾相連,也就是空行

sed -e '/UUID/d' fstab   表示刪除含有UUID的行

sed -e '/UUID/!d' fstab  表示不刪除含有UUID的行,也就是隻顯示含有UUID的行

4,a模式

sed '/hello/aword' westos 表示把word加在含有hello後一行  預設是在後面一行追加

sed 's/hello/hello world/g' westos  表示把含有hello的行替換為hello world  ,這裡g是全文替換,注意前面有s

sed '/hello/aworld westos' westos  表示在含有hello後面一行追加world westos,其中world westos在一行

sed '/hello/aworld\nwestos' westos  表示在含有hello 後面一行追加 world westos,但是有\n表示換行


5,i模式

sed '/hello/iworld\nwestos' westos  表示在含有hello行的前面插入world westos,\n表示換行

6,c模式

sed '/hello/chello world' westos     表示把含有hello的行替換為hello

sed '/hello/cwestos\nworld' westos   表示把含有hello的行替換為westos world,\n表示換行


7,w模式

前面的模式預設是不會改變檔案的內容的

sed -n '/bash$/p' passwd > file     重定向寫入檔案

sed -n '/bash$/wfile' passwd         在w模式下,可以直接寫入檔案,這是追加的過程,不會覆蓋原文

四,sed其他常用命令

sed命令
a\\ 在當前行下面插入文字。
i\\ 在當前行上面插入文字。
c\\ 把選定的行改為新的文字。
d 刪除,刪除選擇的行。
D 刪除模板塊的第一行。
s 替換指定字元
h 拷貝模板塊的內容到記憶體中的緩衝區。
H 追加模板塊的內容到記憶體中的緩衝區。
g 獲得記憶體緩衝區的內容,並替代當前模板塊中的文字。
G 獲得記憶體緩衝區的內容,並追加到當前模板塊文字的後面。
l 列表不能列印字元的清單。
n 讀取下一個輸入行,用下一個命令處理新的行而不是用第一個命令。
N 追加下一個輸入行到模板塊後面並在二者間嵌入一個新行,改變當前行號碼。
p 列印模板塊的行。
P(大寫) 列印模板塊的第一行。
q 退出Sed。
b lable 分支到指令碼中帶有標記的地方,如果分支不存在則分支到指令碼的末尾。
r file 從file中讀行。
t label if分支,從最後一行開始,條件一旦滿足或者T,t命令,將導致分支到帶有標號的命令處,或者到指令碼的末尾。
T label 錯誤分支,從最後一行開始,一旦發生錯誤或者T,t命令,將導致分支到帶有標號的命令處,或者到指令碼的末尾。
w file 寫並追加模板塊到file末尾。
W file 寫並追加模板塊的第一行到file末尾。
! 表示後面的命令對所有沒有被選定的行發生作用。
= 列印當前行號碼。
# 把註釋擴充套件到下一個換行符以前。

sed替換標記
g 表示行內全面替換。
p 表示列印行。
w 表示把行寫入一個檔案。
x 表示互換模板塊中的文字和緩衝區中的文字。
y 表示把一個字元翻譯為另外的字元(但是不用於正規表示式)
\\1 子串匹配標記
& 已匹配字串標記

sed元字符集
^ 匹配行開始,如:/^sed/匹配所有以sed開頭的行。
$ 匹配行結束,如:/sed$/匹配所有以sed結尾的行。
. 匹配一個非換行符的任意字元,如:/s.d/匹配s後接一個任意字元,最後是d。
* 匹配0個或多個字元,如:/*sed/匹配所有模板是一個或多個空格後緊跟sed的行。
[] 匹配一個指定範圍內的字元,如/[ss]ed/匹配sed和Sed。
[^] 匹配一個不在指定範圍內的字元,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一個字母開頭,緊跟ed的行。
\\(..\\) 匹配子串,儲存匹配的字元,如s/\\(love\\)able/\\1rs,loveable被替換成lovers。
& 儲存搜尋字元用來替換其他字元,如s/love/**&**/,love這成**love**。
\\< 匹配單詞的開始,如:/\\\\> 匹配單詞的結束,如/love\\>/匹配包含以love結尾的單詞的行。
x\\{m\\} 重複字元x,m次,如:/0\\{5\\}/匹配包含5個0的行。
x\\{m,\\} 重複字元x,至少m次,如:/0\\{5,\\}/匹配至少有5個0的行。
x\\{m,n\\} 重複字元x,至少m次,不多於n次,如:/0\\{5,10\\}/匹配5~10個0的行。


[root@100 mnt]# cat westos 
hello
[root@100 mnt]# sed '/hello/=' westos     顯示包含hello的行並且輸出行號
1
hello
[root@100 mnt]# sed -n '/hello/=' westos  只顯示包含hello的行號
[root@100 mnt]# cat westos 
hello
[root@100 mnt]# sed '/hello/=' -i westos  -i表示插入文字,插入位置在包行hello的行的上面一行
[root@100 mnt]# cat westos 
1
hello
[root@100 mnt]# cat westos 
hello
[root@100 mnt]# sed '/hello/=' westos 
1
hello
[root@100 mnt]# echo `sed '/hello/=' westos`  echo 把原來兩行的變成了一行的內容
1 hello
[root@100 mnt]# cat westos 
hello
world
[root@100 mnt]# sed '=' westos  列印每一行的行號,並且顯示在該行的上面
1
hello
2
world
[root@100 mnt]# echo `sed '=' westos` 多行變一行
1 hello 2 world
[root@100 mnt]# cat westos 
##############################################
[root@100 mnt]# sed '2r westos' fstab   表示把westos中的內容寫在fstab的第2行之後

#
##############################################
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
[root@100 mnt]# sed '$r westos' fstab     表示把westos中的內容寫在fstab的尾行之後

#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
##############################################
[root@100 mnt]# sed -n '/^UUID/=' fstab     不顯示原來內容,把以UUID開頭的行號顯示出來
9
[root@100 mnt]# sed  '/^UUID/=' fstab        顯示原來內容,把以UUID開頭的行號顯示出來,預設行號在搜尋內容的上一行顯示

#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
9
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
[root@100 mnt]# sed -n -e '/^UUID/p' fstab 
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
[root@100 mnt]# sed -n -e '/^UUID/p' -n -e '/^UUID/=' fstab   既顯示搜尋行,也顯示行號 -e 表示擴充套件
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
9
[root@100 mnt]# sed -n -e '/^UUID/p;/^UUID/=' fstab       可以合併
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
9
[root@100 mnt]# sed '=' fstab 在所有行的前面一行新增行號
1

2
#
3
# /etc/fstab
4
# Created by anaconda on Wed May  7 01:22:57 2014
5
#
6
# Accessible filesystems, by reference, are maintained under '/dev/disk'
7
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8
#
9
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
10
/dev/sda /iscsidisk xfs defaults,_netdev 0 0
[root@100 mnt]# sed '=' fstab | sed 'N;s/\n//g'  給每一行行首新增行號 s表示替換
1
2#
3# /etc/fstab
4# Created by anaconda on Wed May  7 01:22:57 2014
5#
6# Accessible filesystems, by reference, are maintained under '/dev/disk'
7# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8#
9UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
10/dev/sda /iscsidisk xfs defaults,_netdev 0 0
[root@100 mnt]# sed '=' fstab | sed 'N;s/\n/ /g' 給每一行行首新增行號和空格
1 
2 #
3 # /etc/fstab
4 # Created by anaconda on Wed May  7 01:22:57 2014
5 #
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
9 UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
10 /dev/sda /iscsidisk xfs defaults,_netdev 0 0
[root@100 mnt]# cat fstab 
# Created by anaconda on Wed May  7 01:22:57 2014
# Accessible filesystems, by reference, are maintained under '/dev/disk'
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
/dev/sda /iscsidisk xfs defaults,_netdev 0 0
[root@100 mnt]# sed 'G' fstab   每一行後面新增空行
# Created by anaconda on Wed May  7 01:22:57 2014

# Accessible filesystems, by reference, are maintained under '/dev/disk'

UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1

/dev/sda /iscsidisk xfs defaults,_netdev 0 0

[root@100 mnt]# sed '$!G' fstab     除了最後一行外,每一行後面新增空行
# Created by anaconda on Wed May  7 01:22:57 2014

# Accessible filesystems, by reference, are maintained under '/dev/disk'

UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1

/dev/sda /iscsidisk xfs defaults,_netdev 0 0
[root@100 mnt]# cat fstab 
# Created by anaconda on Wed May  7 01:22:57 2014
# Accessible filesystems, by reference, are maintained under '/dev/disk'
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
/dev/sda /iscsidisk xfs defaults,_netdev 0 0
[root@100 mnt]# sed -n '2p' fstab    列印第2行的內容
# Accessible filesystems, by reference, are maintained under '/dev/disk'
[root@100 mnt]# sed -n '$p' fstab    列印最後一行的內容
/dev/sda /iscsidisk xfs defaults,_netdev 0 0


全文替換命令

注意:sed的c模式也可以進行替換,c模式的替換是對關鍵字的整行進行替換,但是s引數是隻對關鍵字進行替換

[root@147 mnt]# cat 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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
gnome-initial-setup:x:993:991::/run/gnome-initial-setup/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
p:x:1001:1001::/home/p:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1003:1003::/home/user2:/bin/bash
user3:x:1004:1004::/home/user3:/bin/bash

[root@147 mnt]# sed 's/nologin/westos/g' passwd                     >>>>>s表示替換,g表示全文的  把nologin全文替換為westos
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/westos
daemon:x:2:2:daemon:/sbin:/sbin/westos
adm:x:3:4:adm:/var/adm:/sbin/westos
lp:x:4:7:lp:/var/spool/lpd:/sbin/westos
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/westos
operator:x:11:0:operator:/root:/sbin/westos
games:x:12:100:games:/usr/games:/sbin/westos
ftp:x:14:50:FTP User:/var/ftp:/sbin/westos
nobody:x:99:99:Nobody:/:/sbin/westos
gnome-initial-setup:x:993:991::/run/gnome-initial-setup/:/sbin/westos
tcpdump:x:72:72::/:/sbin/westos
p:x:1001:1001::/home/p:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1003:1003::/home/user2:/bin/bash
user3:x:1004:1004::/home/user3:/bin/bash
[root@147 mnt]# sed '3,5s/nologin/westos/g' passwd                 >>>>>>全文替換替換3到5行的nologin為westos
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/westos
adm:x:3:4:adm:/var/adm:/sbin/westos
lp:x:4:7:lp:/var/spool/lpd:/sbin/westos
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
gnome-initial-setup:x:993:991::/run/gnome-initial-setup/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
p:x:1001:1001::/home/p:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1003:1003::/home/user2:/bin/bash
user3:x:1004:1004::/home/user3:/bin/bash
[root@147 mnt]# sed -e '/adm/,/sync/s/nologin/westos/g' passwd              >>>>>從包含adm到包行sync的行裡面,全文替換nologin為westos
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/westos
lp:x:4:7:lp:/var/spool/lpd:/sbin/westos
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
gnome-initial-setup:x:993:991::/run/gnome-initial-setup/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
p:x:1001:1001::/home/p:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1003:1003::/home/user2:/bin/bash
user3:x:1004:1004::/home/user3:/bin/bash
[root@147 mnt]# sed -e '/adm/,/sync/s/nologin/westos/g;s/sbin/lee/g' passwd  >>>>從包含adm到包行sync的行裡面,全文替換nologin為westos,全文替換sbin為lee   ;表示銜接多個操作
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/lee/nologin
daemon:x:2:2:daemon:/lee:/lee/nologin
adm:x:3:4:adm:/var/adm:/lee/westos
lp:x:4:7:lp:/var/spool/lpd:/lee/westos
sync:x:5:0:sync:/lee:/bin/sync
shutdown:x:6:0:shutdown:/lee:/lee/shutdown
halt:x:7:0:halt:/lee:/lee/halt
mail:x:8:12:mail:/var/spool/mail:/lee/nologin
operator:x:11:0:operator:/root:/lee/nologin
games:x:12:100:games:/usr/games:/lee/nologin
ftp:x:14:50:FTP User:/var/ftp:/lee/nologin
nobody:x:99:99:Nobody:/:/lee/nologin
gnome-initial-setup:x:993:991::/run/gnome-initial-setup/:/lee/nologin
tcpdump:x:72:72::/:/lee/nologin
p:x:1001:1001::/home/p:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1003:1003::/home/user2:/bin/bash
user3:x:1004:1004::/home/user3:/bin/bash
[root@147 mnt]# vim file
[root@147 mnt]# cat file                     >>>>>把命令寫在檔案裡面
s/sbin/westos/g
s/nologin/linux/g
[root@147 mnt]# sed -f file passwd            >>>>>-f後面指定命令檔案
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/westos/linux
daemon:x:2:2:daemon:/westos:/westos/linux
adm:x:3:4:adm:/var/adm:/westos/linux
lp:x:4:7:lp:/var/spool/lpd:/westos/linux
sync:x:5:0:sync:/westos:/bin/sync
shutdown:x:6:0:shutdown:/westos:/westos/shutdown
halt:x:7:0:halt:/westos:/westos/halt
mail:x:8:12:mail:/var/spool/mail:/westos/linux
operator:x:11:0:operator:/root:/westos/linux
games:x:12:100:games:/usr/games:/westos/linux
ftp:x:14:50:FTP User:/var/ftp:/westos/linux
nobody:x:99:99:Nobody:/:/westos/linux
gnome-initial-setup:x:993:991::/run/gnome-initial-setup/:/westos/linux
tcpdump:x:72:72::/:/westos/linux
p:x:1001:1001::/home/p:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1003:1003::/home/user2:/bin/bash
user3:x:1004:1004::/home/user3:/bin/bash
[root@147 mnt]# cat passwd                      >>>>>注意sed的操作是不會改變原始檔的內容的
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
gnome-initial-setup:x:993:991::/run/gnome-initial-setup/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
p:x:1001:1001::/home/p:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1003:1003::/home/user2:/bin/bash
user3:x:1004:1004::/home/user3:/bin/bash
[root@147 mnt]# sed -f file -i passwd                   >>>>>-i輸入到passwd檔案,儲存起來
[root@147 mnt]# cat passwd                              >>>>>此時檢視原始檔也被修改了
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/westos/linux
daemon:x:2:2:daemon:/westos:/westos/linux
adm:x:3:4:adm:/var/adm:/westos/linux
lp:x:4:7:lp:/var/spool/lpd:/westos/linux
sync:x:5:0:sync:/westos:/bin/sync
shutdown:x:6:0:shutdown:/westos:/westos/shutdown
halt:x:7:0:halt:/westos:/westos/halt
mail:x:8:12:mail:/var/spool/mail:/westos/linux
operator:x:11:0:operator:/root:/westos/linux
games:x:12:100:games:/usr/games:/westos/linux
ftp:x:14:50:FTP User:/var/ftp:/westos/linux
nobody:x:99:99:Nobody:/:/westos/linux
gnome-initial-setup:x:993:991::/run/gnome-initial-setup/:/westos/linux
tcpdump:x:72:72::/:/westos/linux
p:x:1001:1001::/home/p:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1003:1003::/home/user2:/bin/bash
user3:x:1004:1004::/home/user3:/bin/bash

五,shell指令碼練習

編寫指令碼,安裝httpd服務,修改httpd服務的埠

測試





相關文章