shell程式設計(四)| sed 正規表示式
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結尾結尾的行
- [root@100 mnt]# cat -n fstab
- 1
- 2 #
- 3 # /etc/fstab
- 4 # Created by anaconda on Wed May 7 01:22:57 2014
- 5 #
- 6 UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 / xfs defaults 1 1
- 7 /dev/sda /iscsidisk xfs defaults,_netdev 0 0
- [root@100 mnt]# cat -n fstab | sed -n '2,6p' >>>>>>>>顯示第2到6行
- 2 #
- 3 # /etc/fstab
- 4 # Created by anaconda on Wed May 7 01:22:57 2014
- 5 #
- 6 UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 / xfs defaults 1 1
- [root@100 mnt]# cat -n fstab | sed -n -e '2p' -e '6p' >>>>>>>>顯示第2和第6行
- 2 #
- 6 UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 / xfs defaults 1 1
- [root@100 mnt]# cat -n fstab | sed -n -e '2p;6p' >>>>>>>>顯示第2和第6行 這裡把上一條合併了
- 2 #
- 6 UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 / xfs defaults 1 1
- [root@100 mnt]# cat -n fstab | sed -n '2p;6p' >>>>>>>顯示第2和第6行
- 2 #
- 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行不現實
- [root@100 mnt]# cat -n fstab | sed -n -e '2!p'
- 1
- 3 # /etc/fstab
- 4 # Created by anaconda on Wed May 7 01:22:57 2014
- 5 #
- 6 UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 / xfs defaults 1 1
- 7 /dev/sda /iscsidisk xfs defaults,_netdev 0 0
- [root@100 mnt]# cat -n fstab | sed -n -e '2,5!p'
- 1
- 6 UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 / xfs defaults 1 1
- 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行
- [root@100 mnt]# cat -n fstab | sed -n -e '2!p;6!p' >>>>>會有重複的,但是第2行和第6行沒有重複
- 1
- 1
- 2 #
- 3 # /etc/fstab
- 3 # /etc/fstab
- 4 # Created by anaconda on Wed May 7 01:22:57 2014
- 4 # Created by anaconda on Wed May 7 01:22:57 2014
- 5 #
- 5 #
- 6 UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 / xfs defaults 1 1
- 7 /dev/sda /iscsidisk xfs defaults,_netdev 0 0
- 7 /dev/sda /iscsidisk xfs defaults,_netdev 0 0
- [root@100 mnt]# cat -n fstab | sed -n -e '2!p;6!p' | uniq -d >>>>>>uniq -d表示顯示重複的行 -d=--repeated
- 1
- 3 # /etc/fstab
- 4 # Created by anaconda on Wed May 7 01:22:57 2014
- 5 #
- 7 /dev/sda /iscsidisk xfs defaults,_netdev 0 0
- [root@100 mnt]# cat -n fstab | sed -n -e '2!p;6!p' | uniq -u >>>>>>uniq -u表示顯示不重複的行 -u=--unique
- 2 #
- 6 UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 / xfs defaults 1 1
練習
給定userfile和passfile,批量建立使用者
- [root@100 mnt]# cat userfile
- user1
- user2
- user3
- [root@100 mnt]# cat passwdfile
- user1123
- user2123
- user3123
- [root@100 mnt]# cat user.sh
- #################################
- # Author: Minz #
- # Version: #
- # Mail: zmxxx@163.com #
- # Date: 2018-06-19 #
- # Description #
- # #
- #################################
- #!/bin/bas
- NUM=$( echo `wc -l userfile` | cut -d " " -f 1 ) >>>>確定使用者數
- for i in `seq 1 $NUM ` >>>>seq 從1開始遞增
- do
- USERNAME=`sed -n "${i}p" userfile`
- PASSWORD=`sed -n "${i}p" passwdfile`
- useradd $USERNAME
- echo $PASSWORD | passwd --stdin $USERNAME
- done
- 測試
- [root@100 mnt]# sh user.sh
- Changing password for user user1.
- passwd: all authentication tokens updated successfully.
- Changing password for user user2.
- passwd: all authentication tokens updated successfully.
- Changing password for user user3.
- 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結尾的行。
. 匹配一個非換行符的任意字元,如:/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服務的埠
測試
相關文章
- shell程式設計(四)| grep正規表示式程式設計
- 05 shell程式設計之正規表示式程式設計
- Shell程式設計基礎學習之一:正規表示式程式設計
- shell指令碼正規表示式指令碼
- Qt Creator程式設計之正規表示式QT程式設計
- Linux系統程式設計(19)——正規表示式在sed和awk中的使用Linux程式設計
- Sed 命令詳解 正規表示式元字元字元
- shell指令碼(14)-正規表示式指令碼
- shell基礎 — 基本正規表示式
- 正規表示式筆記(四)筆記
- 理解正規表示式(程式設計師第3期文章)程式設計師
- 【Perl程式設計-6】正規表示式--替換+轉化程式設計
- QTP的描述性程式設計與正規表示式QT程式設計
- [.net 物件導向程式設計進階] (4) 正規表示式 (三) 表示式助手物件程式設計
- Python正規表示式初識(四)Python
- 學習C#高階程式設計之正規表示式C#程式設計
- Linux系統程式設計(16)——正規表示式入門Linux程式設計
- Linux系統程式設計(17)——正規表示式進階Linux程式設計
- [Shell] awk學習(3)-regular expression 正規表示式Express
- 正規表示式
- 『忘了再學』Shell基礎 — 24、Shell正規表示式的使用
- .NET下正規表示式應用四例
- 正規表示式(程式碼java版)Java
- 匹配空行正規表示式程式碼
- 【正規表示式】常用的正規表示式(數字,漢字,字串,金額等的正規表示式)字串
- 正規表示式子表示式程式碼例項
- 【JavaScript】正規表示式JavaScript
- php –正規表示式PHP
- 正規表示式 教程
- 正規表示式 split()
- java正規表示式Java
- PHP正規表示式PHP
- javascript正規表示式JavaScript
- 【java】正規表示式Java
- 初探正規表示式
- [js]正規表示式JS
- js正規表示式JS
- javascript–正規表示式JavaScript