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结尾结尾的行


[html] view plain copy
  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行不现实

[html] view plain copy
  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行

[html] view plain copy
  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,批量创建用户

[html] view plain copy
  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:           [email protected] #  
  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服务的端口

测试





猜你喜欢

转载自blog.csdn.net/ha_weii/article/details/80754284