sed工具与正则表达式的使用(shell第四天)

sed工具 【流式编辑器】

—— 非交互,基于模式匹配过滤及修改文本
—— 逐行处理,并将结果输出到屏幕
——可实现对文本的输出,删除,替换,复制,剪切,导入,导出等各种操作

命令格式:
1)前置命令 | sed [选项] ‘条件指令‘ 【利用管道】
2)sed [选项] ‘条件指令‘ 文件.. ..

常用选项:
-n 屏蔽默认输出,默认sed会输出读取文档的全部内容

-i sed直接修改源文件,默认sed只是通过内存临时修改文件,源文件无影响
[正常情况下,sed命令所做的处理只是把操作结果(包括打印、删除等)输出到当前终端屏幕,而并不会对原始文件做任何更改]

-r (让sed支持扩展正则)

例:
-n
查看文件/etc/hosts第1行
[[email protected] ~]# sed -n ‘1p‘ /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

查看/etc/passwd 3-6行
[[email protected] ~]# sed -n ‘3,6p‘ /etc/passwd
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

查看文件/etc/passwd第3行和第6行
[[email protected] ~]# sed -n ‘3p;6p‘ /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync

-i
删除文件进行逐条删除【实际未对文件进行修改】
[[email protected] ~]# sed ‘d‘ /wooo.txt
[[email protected] ~]# cat /wooo.txt
thekncxn;zcnk
dagahao the
wojiaozazahuithe koa
修改源文件【慎用】
[[email protected] ~]# sed -i ‘d‘ /wooo.txt
[[email protected] ~]# cat /wooo.txt

二) 认识sed工具的条件

sed [选项] ‘条件指令‘ 文件.. ..

1)sed命令可以使用行号或正则做为条件匹配:

sed -n ‘3p‘ /etc/passwd 打印第3行

sed -n ‘3,5p‘ /etc/passwd 打印第3到5行

sed -n ‘3p;5p‘ /etc/passwd 打印第3和5行

sed -n ‘3,+10p‘ /etc/passwd 打印第3以及后面的10行

sed -n ‘1~2p‘ /etc/passwd 打印奇数行

sed -n ‘2~2p‘ /etc/passwd 打印偶数行

2)正则案例

【采用//把需要搜索的内容查找出来】
sed -n ‘/root/p‘ /etc/passwd 打印包含root的行

sed -n ‘/bash$/p‘ /etc/passwd 打印bash结尾的行[可以登陆的用户]

三)指令集合

【打印】p
sed -n ‘p‘ a.txt 输出所有行,等同于cat a.txt
sed -n ‘4p‘ a.txt 输出第4行
sed -n ‘4,7p‘ a.txt 输出第4~7行
sed -n ‘4,+10p‘ a.txt 输出第4行及其后的10行内容
sed -n ‘/^bin/p‘ a.txt 输出以bin开头的行
sed -n ‘$=‘ a.txt 输出文件的行数

[[email protected] ~]# sed -n ‘$=‘ /etc/passwd
47 [后面无目录显示]

[[email protected] ~]# wc -l /etc/passwd
47 /etc/passwd

【删除】d 注:练习时不需加 i ,防止文件误删!

sed ‘3,5d‘ a.txt 删除第3~5行
sed ‘/xml/d‘ a.txt 删除所有包含xml的行
sed ‘/xml/!d‘ a.txt 删除不包含xml的行,!符号表示取反
sed ‘/^install/d‘ a.txt 删除以install开头的行
sed ‘$d‘ a.txt 删除文件的最后一行
sed ‘/^$/d‘ a.txt 删除所有空行

【替换】s (s/旧内容/新内容/选项)

vim test.txt 练习环境
2017 2011 2018
2017 2017 2024
2017 2017 2017

sed ‘s/2017/xxxx/‘ test.txt 替换所有行匹配的第一个2017
sed ‘s/2017/xxxx/g‘ test.txt 替换所有的2017
sed ‘s/2017/xxxx/2‘ test.txt 替换所有行匹配的第二个2017
sed ‘s/2017//2‘ test.txt 将所有行匹配的第二个2017删除
sed ‘2s/2017/xxx/2‘ test.txt 将第二行匹配的第二个2017删除
sed ‘2~2s/2017/xxx/g‘ test.txt 替换偶数行的2017
sed -n ‘s/2017/x[[email protected] ~]# vim anonftp.shxxx/p‘ test.txt 打印
sed ‘4,7s/^/#/‘ a.txt //将第4~7行注释掉(行首加#号)
sed ‘s/^#an/an/‘ a.txt //解除以#an开头的行的注释(去除行首的#号)

ifconfig | sed -n ‘2s/netm.//p‘ | sed ‘s/.t//‘ 查看ip
172.25.0.11

sed ‘s/\/bin\/bash/\sbin\/sh/‘ /etc/passwd

sed ‘s#/bin/bash#/sbin/sh/#‘ /etc/passwd

将首字母和尾字母调换
sed -r ‘s/^(.)(.*)(.)$/\3\2\1/‘ /wooo.txt
【每行文本拆分为“第1个字符”、“中间的所有字符”、“倒数第1个字符”三个部分,然后通过替换操作重排顺序为“3-2-1”】

dello worlh
oa ga had
io xi za za huw

将所有大写字母加大括号
sed -r ‘s/([A-Z])/[\1]/‘ /wooo.txt
hell[O] world
d[A] ga hao
[W]o xi za za hui

编写脚本:【实现自动安装ftp软件包并配置他人可访问和上传】
通过yum安装vsftpd软件包
修改vsftpd服务配置,开启匿名上传
调整/var/ftp/pub目录权限,允许ftp写入
启动vsftpd服务,并设置开机自运行

#!/bin/bash
yum -y install vsftpd
cp /etc/vsftpd/vsftpd.conf{,.back}
sed -i ‘s/^#an/an/‘ /etc/vsftpd/vsftpd.conf
chmod 777 /var/ftp/pub
systemctl restart vsftpd
systemctl enable vsftpd

无法访问常见原因
1)防火墙未打开
2)selinux未打开
3)重启服务

sed [选项] ‘条件指令‘ 文件.....
选项 :-n -i -r
条件:行号,/正则/
指令 :p,d,s,a,i,c

a,append追加,后
i,insert插入,前
c,把该行删除并插入

:r 读入
:w 另存为
sed ‘2r /etc/hosts‘ tmp.txt 将文件tmp.txt读入到文件/etc/hosts的第二行
sed ‘w /root/b.txt‘ tmp.txt 将文件tmp.txt另存为文件root/b.txt内
sed ‘2w/root/b.txt‘ tmp.txt 将

脚本:筛选用户并显示密码
#!/bin/bash
a=sed -n /bash$/s/:.*//p /etc/passwd
for i in $a
do
pass=grep $i /etc/shadow
pass1=${pass#:}
pass2=${pass1%%:
}
echo "$i ------>$pass2"
done

原文地址:http://blog.51cto.com/13713381/2109348

时间: 2024-10-31 12:36:30

sed工具与正则表达式的使用(shell第四天)的相关文章

shell脚本之正则表达式(二)---sed工具

sed工具 sed是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除.替换.添加.移动等),最后输出所有行或者仅输出处理的某些行.sed 也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于 Shell 脚本中,用以完成各种自动化处理任务. sed工作流程 1.读取:sed 从输入流(文件.管道.标准输入)中读取一行内容并存储到临时的缓冲区中.2.执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命

shell编程之正则表达式(二)sed工具

sed 工具 sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除.替换.添加.移动等),最后输出所有行或者仅输出处理的某些行.sed 也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于 Shell 脚本中,用以完成各种自动化处理任务.sed 的工作流程主要包括读取.执行和显示三个过程. 读取:sed 从输入流(文件.管道.标准输入)中读取一行内容并存储到临时的缓 冲区中(又称模式空间,pattern spac

Shell编程之正则表达式三剑客——sed工具

sed工具概述 擅长对数据行进行处理,sed是一种流编辑器,处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重定向存储输出.利用sed命令可以将数据行进行替换.删除.新增.选取等特定工作. sed命令常见用法 sed [选项] '操作' 参数 sed [选项] -f scriptfile 参数 常见的

shell脚本---grep、awk、sed工具

grep:Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.grep是一种查找过滤工具,正则表达式在grep中用来查找符合模式的字符串. grep有三种变形: 1.grep:标准grep命令主要讨论此格式. 2.egrep:扩展grep,支持基本及扩展的正则表达式 3.fgrep:快速grep,允许查找字符串而不是一个模式.这里的快速并不是值速度快 格式 grep [options] 主要参数 [options]主要参数: -c:只输出匹配行

正则表达式三剑客之二sed工具

三剑客之二sed工具 sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除.替换.添加.移动等),最后输出所有行或者仅输出处理的某些行.sed 也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于 Shell 脚本中,用以完成各种自动化处理任务. sed 的工作流程主要包括读取.执行和显示三个过程. ?读取:sed 从输入流(文件.管道.标准输入)中读取一行内容并存储到临时的缓 冲区中(又称模式空间,patter

shell脚本--sed工具

sed sed:它叫做流式编辑器,它的工作场景一般是在编辑器中,把一段文本按行读入sed中然后按指定的方式输出,这是它最基本的用法. 一.sed的基本操作: 1./pattern/action pattern为正则表达式,对满足pattern的行作action操作 例如 这条命令和grep基本一样,其中-n的意思是只将执行后面指令的显示出来,如果不加-n选项则会把所有信息显示以便并且把匹配到的多显示一遍,p的意思是打印,如果改成d则是删除.-i的话则会修改源文件 2./pattern/s/pat

正则表达式与grep、sed工具使用简介

正则表达式与grep.sed工具使用简介 一.正则表达式     正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. 其介绍如下:      \ 将下一个字符标记符.或一个向后引用.或一个八进制转义符 ^ 匹配输入字符串的开始位置 $ 匹配输入字符串的结束位置 * 匹配前面的子表达式任意次 + 匹配前面的子表达式一次或多次(大于等于1次) ? 匹配前

shell脚本 sed工具练习

1. Sed简介           sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等.以下介绍的是Gnu版本的Sed 3.02.   2. 定址         

正则表达式笔记 sed工具

[:alnum:] 代表英文大小写字符及数字,即0-9 A-Z a-z [:alpha:] 代表任何英文大小写字符,即A-Z a-z [:blank:] 代表空格键与TAB键 [:cntrl:] 代表键盘上面的控制案件,即包括CR LF TAB DEL等 [:digit:] 代表数字 0-9 [:graph:] 除了空格键与TAB键外其他的所有键 [:lower:] 代表小写字符 a-z [:print:] 代表任何可以被打印出来的字符 [:punct:] 代表标点符号 即"';:!#$等 [: