字符串的初值 正则表达式 sed应用
目录
字符串的初值(备用值)
正则表达式
基础正则列表
扩展正则列表
基本正则:
扩展正则egrep:
基本元字符
{}限定次数
其他元字符
整体及边界匹配
sed基本用法
sed命令
命令格式
常见的命令选项
常用动作指令
输出文本
删除文本
替换文本
如何把/bin/bash换成/sbin/sh?
sed替换应用
编写脚本,搭建ftp服务,并且实现匿名上传功能
sed的文本块处理动作
a行后追加练习
i行前追加练习
c替换练习
sed高级应用
导入导出操作
!取反操作
sed综合脚本应用
字符串的初值(备用值)
- 使用${}表达式,格式: ${变量名:-(备用值)} 变量为非空值时不能使用
正则表达式
可以配合某工具对文档进行过滤筛选
-
基础正则列表
| 正则符号 | 描述 |
| ^ | 匹配行首 |
| $ | 匹配行尾 |
| [ ] | 集合,匹配集合中任意单个字符 |
| [ ^ ] | 对集合进行取反 |
| . | 匹配任意单个字符 |
| * | 匹配前一个字符任意次数 (*不允许单独使用) |
| \{n,m\} | 匹配前一个字符n到m次 |
| \{n\} | 匹配前一个字符n次 |
| \{n,\} | 匹配前一个字符n次及以上 |
| \( \ ) | 保留,组合成一个整体 |
-
扩展正则列表
| 正则符号 | 描述 |
| + | 最少匹配一次 |
| ? | 最多匹配行首 |
| {n,m} | 匹配n到m次 |
| ( ) | 组合为整体,保留,相当于复制 |
| | | 或者 |
| \b | 单词边界 |
准备素材:
[root@server0 ~]# head -5 /etc/passwd > user [root@server0 ~]# cat user 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基本正则:
[root@server0 ~]# head -5 /etc/passwd > /mnt/test ##以test为素材 [root@server0 ~]# cat test 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 [root@server0 ~]# grep root test ##查找有root的行 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# grep ^root test ##查找以root开头的行 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# grep bash$ test ##查找以bash结尾的行 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# grep "[ro]" test ##查找字母r或者o的行 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[root@server0 ~]# grep "[a-z]" test ##查找所有小写字母
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
[root@server0 ~]# grep "[A-Z]" test ##查找所有大写字母 素材内无大写所以无匹配.
[root@server0 ~]# grep "[0-9]" test ##查找所有数字
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
[root@server0 ~]# grep "[a-Z]" test ##查找所有字母
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
[root@server0 ~]# grep "[^ro]" test ##查找r或者o之外的内容
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
[root@server0 ~]# grep "[^0-9]" test ##查找数字之外的内容
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
扩展正则egrep:
- 文本处理顺序:
- 基本用法: 等同于grep -E ,表示允许使用扩展的正则表达式
| 常用选项 | 作用 |
| -i | 忽略字母大小写 |
| -v | 条件取反 |
| -c | 统计匹配的行数 |
| -q | 静默,无任何输出,一般用于检测 |
| -n | 显示出匹配结果所在的行号 |
| --color | 标红显示匹配字串 |
基本元字符
| 类型 | 含义 | 示例 | 说明 |
| ^ | 匹配行首 | ^abc | 以abc开头的行 |
| ^# | 以#开头的行(比如注释行) | ||
| $ | 匹配行尾 | abc$ | 以abc结尾的行 |
| ^$ | 空行 | ||
| . | 单个字符 | . | 除换行符(\n)以外的任意单个字符 |
| + | 最少匹配一次 | a+ | 一个或多个连续的a |
| (abc)+ | 一个或多个连续的abc | ||
| ? | 最多匹配一次 | a? | 0个或1个a |
| (abc)? | 0个或1个abc | ||
| * | 匹配任意次数 | a* | 0个或多个连续的a |
| (abc)* | 0个或多个连续的abc | ||
| * | 任意长度的任意字符串 |
{}限定次数
| 类型 | 含义 | 示例 | 说明 |
| {n} | 匹配n次 | (ab){3} | 匹配ababab |
| {n,m} | 匹配n-m次 | (ab){1,3} | 匹配ab,abab,ababab |
| {n,} | 匹配至少n次 | (ab){2,} | 匹配2个及以上连续的ab |
其他元字符
| 示例 | 说明 |
| [alc45_?] | 匹配a,l,c,4,5,_,? |
| [a-z] | 匹配任意小写字母 |
| [A-Z] | 匹配任意大写字母 |
| [0-9] | 匹配任意数字 |
| [a-Z0-9] | 匹配任意字母或数字 |
| [^A-Z] | 匹配包括非大写字母的行 |
| ^[^a-z] | 匹配不以小写字母开头的行 |
整体及边界匹配
| 类型 | 含义 | 示例 | 说明 |
| () | 组合为整体 | ab{1,3} | 匹配ab,abb,abbb |
| (ab){1,3} | 匹配ab,abab,ababab | ||
| | | 或者 | root|bin | 匹配root|bin |
| \b | 单词边界 | \broot\b | 匹配单词root,不匹配keroot,rooty等字符串 |
| \< | 单词的开头 | \<th | 匹配以th开头的单词 |
| \> | 单词的结束 | \<root\> | 作用与\broot\b相同 |
| \w | 字母数字下划线 | \wa | 匹配xa,不匹配#a |
| \s | 匹配空白 | \sa | 匹配 a,不匹配xa |
| \d | 匹配数字 | -P \da | 匹配n(数字)a,不匹配xa |
sed基本用法
sed命令
sed,流式编辑器
- 非交互,基于模式匹配过滤文件及修改文本
- 逐行处理,并将结果输出到屏幕
- 可实现对文本的输出,删除,替换,复制,剪切,导入,导出等各种操作
命令格式
- 格式一:前置命令 | sed 选项 (定址符)指令
- 格式二: sed 选项 (定址符)指令 被处理的文件
常见的命令选项
| -n | 屏蔽默认输出(全部文本) |
| -i | 直接修改文件内容,对文件进行实际操作 |
| -r | 启用扩展的正则表达式,若与其他选项一起使用,应作为首个选项 |
| -e | 指定需要执行的-e指令,支持使用多个-e参数 |
| -f | 指定需要执行的脚本文件,需要提前将sed指令写入文件中 |
条件,可以使行号或/正则/
行号可以使用单个数字表示单行
或者n,m表示连续的多行
省略条件,正则默认逐行处理全部文本
匹配正则时,则需要使用//
常用动作指令
替换操作的分隔"/"可改用其他字符,如#.&等,便于修改文件路径
| 操作符 | 用途 | 指令示例 |
| p | 打印行 | 2,4p 输出2 3 4 行 |
| 2p;4p 输出第2 4 行 | ||
| d | 删除行 | 2,4d 删除第2 3 4 行 |
| s | 字符串替换 | s/old/new/ 将每行的第一个old替换为new |
| s/old/new/3 将每行的第三个old替换为new | ||
| s/old/new/g 将所有的old都替换为new |
输出文本
[root@server0 ~]# cat test ##以test文件作为素材 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 [root@server0 ~]# sed 'p' test ##输出+默认输出,所以是每行出现2次 root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed -n 'p' test ## 输出全文 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 [root@server0 ~]# sed -n '1p' test ##输出第一行 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# sed -n '2p' test ##输出第二行 bin:x:1:1:bin:/bin:/sbin/nologin [root@server0 ~]# sed -n '3p' test ##输出第三行 daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@server0 ~]# sed -n '1,3p' test ##输出1-3行 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@server0 ~]# sed -n '1p;3p' test ##输出第1行和第3行 root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@server0 ~]# sed -n '1,+2p' test ##输出第1行以及后面2行 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@server0 ~]# sed -n '3,+1p' test ##输出第3行以及后面1行 daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin [root@server0 ~]# sed -n '1~2p' test ##输出奇数行 root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed -n '2~2p' test ##输出偶数行 bin:x:1:1:bin:/bin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin [root@server0 ~]# sed -n '/root/p' test ##输出有root的行 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# sed -n '/^root/p' test ##输出以root开头的行 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# free | sed -n '2p' ##输出free指令生成的文档的第2行 Mem: 1446924 70232 1108292 8608 268400 1211636 [root@server0 ~]# sed -rn '/root|bin/p' test ##输出有root或者有bin的行 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 [root@server0 ~]# sed -n '$=' test ##统计输出全文最后1行行号 5删除文本
[root@server0 ~]# sed 'd' test ##删除全文 [root@server0 ~]# sed '1d' test ##删除第1行,显示剩余行 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 [root@server0 ~]# sed '2d' test ##删除第2行, root:x:0:0:root:/root:/bin/bash 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 [root@server0 ~]# sed '5d' test ##删除第5行 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 [root@server0 ~]# sed '1,3d' test ##删除1-3行 adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed '3,+2d' test ##删除第3行以及后面2行 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin [root@server0 ~]# sed '/bash$/d' test ##删除以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 [root@server0 ~]# sed '1d;3d' test ##删除第1行和第3行 bin:x:1:1:bin:/bin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed '1~2d' test ##删除奇数行 bin:x:1:1:bin:/bin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin [root@server0 ~]# sed '2~2d' test ##删除偶数行 root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed '$d' test ##删除全文最后1行 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 [root@server0 ~]# sed '/var/!d' test ##不删除有var的行 adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin替换文本
[root@server0 ~]# vim hihi ##以hihi作为素材 2017 2011 2018 2017 2017 2024 2017 2017 2017 [root@server0 ~]# sed 's/2017/xxxx/' hihi ##将所有行的第1个2017替换成xxxx xxxx 2011 2018 xxxx 2017 2024 xxxx 2017 2017 [root@server0 ~]# sed 's/2017/xxxx/2' hihi ##将全文的第2列的2017替换成xxxx 2017 2011 2018 2017 xxxx 2024 2017 xxxx 2017 [root@server0 ~]# sed 's/2017/xxxx/g' hihi ##将全文的2017替换成xxxx xxxx 2011 2018 xxxx xxxx 2024 xxxx xxxx xxxx [root@server0 ~]# sed '2s/2017/xxxx/' hihi ##将第2行的第1个2017替换成xxxx 2017 2011 2018 xxxx 2017 2024 2017 2017 2017 [root@server0 ~]# sed '3s/2017/xxxx/2' hihi ##将第3行的第2个2017替换成xxxx 2017 2011 2018 2017 2017 2024 2017 xxxx 2017 [root@server0 ~]# sed '3s/2017//2' hihi ##潜在的删除功能,将第3行的第2个2017替换成空 2017 2011 2018 2017 2017 2024 2017 2017 [root@server0 ~]# sed 's/2024/xxxx/p' hihi ##将所有行的2024替换成xxxx 2017 2011 2018 2017 2017 xxxx 2017 2017 xxxx 2017 2017 2017如何把/bin/bash换成/sbin/sh?
[root@server0 ~]# cat test ##以test作为素材
root:x:0:0:root:/root:/bin/bash
[root@server0 ~]# sed 's/\/bin\/bash/\/sbin\/sh/' test ##正常替换,繁琐
root:x:0:0:root:/root:/sbin/sh
[root@server0 ~]# sed 's#/bin/bash#/sbin/sh#' test ##修改替换符,简洁
root:x:0:0:root:/root:/sbin/sh
sed替换应用
创建素材文件:nssw.txt
[root@server0 ~]# vim nssw.txt Hello the world ni ha4o ma beijing删除文件中每行的第二个,最后一个字符
[root@server0 ~]# sed 's/.//2;s/.$//' nssw.txt hllo the world n hao ma beijin将文件中每行的第一个,倒数第一个字符互换
[root@server0 ~]# sed -r 's/^(.)(.*)(.)$/\3\2\1/' nssw.txt dello the worlh gi hao ma beijinn删除文件中的数字
[root@server0 ~]# sed -i 's/[0-9]//g' nssw.txt hello the world ni hao ma beijing为文件中每个大写字母添加括号
[root@server0 ~]# sed -r 's/([A-Z])/{\1}/g' nssw.txt {H}ello t{H}e world ni hao {M}a bei{J}ing [root@server0 ~]# sed -r 's/([A-Z])/[\1]/g' nssw.txt [H]ello t[H]e world ni hao [M]a bei[J]ing [root@server0 ~]# sed -r 's/([A-Z])/(\1)/g' nssw.txt (H)ello t(H)e world ni hao (M)a bei(J)ing编写脚本,搭建ftp服务,并且实现匿名上传功能
测试:在真机上连接ftp://172.25.0.11进入pub目录,注意selinux和防火墙的影响!!!!!!!!!!!!!!!!!!!!!!!
[root@server0~]# vim test03.sh #!/bin/bash #这是一个简单的ftp服务 if [ "$USER" != "root" ];then echo "你不是管理员,没有权限哦!" exit 2 fi rpm -q vsftpd if [ $? -ne 0 ];then yum -y install vsftpd &> /dev/null sed -i '/^#anon_upl/s/#//' /etc/vsftpd/vsftpd.conf systemctl restart vsftpd systemctl enable vsftpd &> /dev/null chmod 777 /var/ftp/pub #setenforce 0 ##安装有防火墙就需要这2行 #systemctl stop firewalld else echo "请稍等..." sed -i '/^#anon_upl/s/#//' /etc/vsftpd/vsftpd.conf systemctl restart vsftpd systemctl enable vsftpd &> /dev/null chmod 777 /var/ftp/pub #setenforce 0 ##安装有防火墙就需要这2行 #systemctl stop firewalld fised的文本块处理动作
| 操作符 | 用途 | 指令示例 |
| i | 行前插入文本 | 2iYY 在第二行之前添加文本行"YY" |
| 4,7iYY 在第4-7行的每一行前添加文本行 | ||
| a | 行后插入文本 | 2aYY 在第二行之后添加文本 |
| /^XX/aYY 在以XX开头的行之后添加文本 | ||
| c | 替换当前行 | 2cYY 将第二行的内容修改为"YY" |
处理多行文本:修改后的文本有多行时
- 以换行符 \n 分隔
- 或者,使用 \ 强制换行
a行后追加练习
[root@server0 ~]# cat user #准备素材 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[root@server0 ~]# sed '1a XXXX' user #第一行下追加字母 root:x:0:0:root:/root:/bin/bash XXXX 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[root@server0 ~]# sed '1,3a XXXX' user #第1-3行下都追加字母 root:x:0:0:root:/root:/bin/bash XXXX bin:x:1:1:bin:/bin:/sbin/nologin XXXX daemon:x:2:2:daemon:/sbin:/sbin/nologin XXXX adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin[root@server0 ~]# sed '1,+1a XXXX' user #第一行以及后面的一行追加字母 root:x:0:0:root:/root:/bin/bash XXXX bin:x:1:1:bin:/bin:/sbin/nologin XXXX 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[root@server0 ~]# sed '/root/a XXXX' user #有root的行下追加 root:x:0:0:root:/root:/bin/bash XXXX 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/nologini行前追加练习
[root@server0~]# sed 'i 666' test ##所有行前添加一行666 666 root:x:0:0:root:/root:/bin/bash 666 bin:x:1:1:bin:/bin:/sbin/nologin 666 daemon:x:2:2:daemon:/sbin:/sbin/nologin 666 adm:x:3:4:adm:/var/adm:/sbin/nologin 666 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0~]# sed '2,+1i 666' test ##第2~3行前添加一行666 root:x:0:0:root:/root:/bin/bash 666 bin:x:1:1:bin:/bin:/sbin/nologin 666 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 [root@server0~]# sed '/root/i 666' test ##有root的行前添加一行666 666 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 [root@server0~]# sed '/^root/i 666' test ##以root开头的行添加一行666 666 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 [root@server0~]# sed '2i 666' test ##第2行前添加一行666 root:x:0:0:root:/root:/bin/bash 666 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/nologinc替换练习
[root@server0 ~]# sed 'c XXXX' user #将所有行替换为XXXX XXXX XXXX XXXX XXXX XXXX[root@server0 ~]# sed '1c XXXX' user #将第一行替换成XXXX XXXX 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[root@server0 ~]# sed '1,2c XXXX' user #将第一二行替换成XXXX XXXX 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[root@server0 ~]# sed '/root/c XXXX' user #将以root开头的行替换成XXXX XXXX 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/nologinsed高级应用
导入导出操作
- r 动作应结合 -i 选项才会存入,否则只输出
- w 动作以覆盖的方式另存为新文件
| 操作符 | 用途 | 指令示例 |
| r | 读取文件 | 3r b.txt 在第3行下方添加文件b.txt |
| 4,7r b.txt 在第4-7行后添加文件b.txt | ||
| w | 保存到文件 | 3w c.txt 将第3行另存为文件c.txt |
| 4,7w c.txt 将第4-7行另存为文件c.txt |
!取反操作
用途:
- 根据定址条件取反
示例
- 列出不使用bash的用户账号记录
sed综合脚本应用
编写一个脚本
要求编写脚本getupwd.sh,实现以下需求:
- 找到使用bash作登录Shell的本地用户
- 列出这些用户的shadow密码记录
- 按每行“用户名 --> 密码记录”保存到getupwd.log,如图-1所示
方案:
总结
以上是生活随笔为你收集整理的字符串的初值 正则表达式 sed应用的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: case分支 shell函数
- 下一篇: LNMP动态网站