CONTENTS
1 正则表达式
(1)正则表达式( regular expression, RE )是一种字符模式,用于在查找过程中匹配指定的字符。
在大多数程序里,正则表达式都被置于两个正斜杠之间;例如 /[o0]ve/ 就是由正斜杠界定的正则表达式,
它将匹配被查找的行中任何位置出现的相同模式。在正则表达式中, 元字符是最重要的概念。
(2)元字符
定义:元字符是这样一类字符,它们表达的是不同于字面本身的含义。
shell元字符(也称为通配符)由shell来解析 , 如 rm -rf *.pdf,元字符 * Shell将其解析为任意多个字符;
正则表达式元字符 由各种执行模式匹配操作的程序来解析,比如vi、grep、sed、awk、python。
(3)基本的正则表达式的元字符类型如下:
扩展正则表达式元字符:
2 grep家族
grep:在文件中全局查找指定的正则表达式,并打印所有包含该表达式的行
egrep:扩展的egrep,支持更多的正则表达式元字符
fgrep:固定grep(fixed grep) ,有时也被称作快速(fast grep) ,它按字面解释所有的字符
最常用也就是grep和egrep。
(1)grep的选项 :
grep程序的输入可以来自标准输入或管道,而不仅仅是文件,例如:
(2)grep和egrep
(3)举出grep和egrep的示例:
#grep的简单用法,具体一些参数就不详细解释了
grep 'tom'
ps aux | grep 'sshd' #过滤sshd的服务
ll | grep '^d' #过滤当前文件下的目录文件
grep 'alice' /etc/passwd /etc/shadow /etc/group #过滤alice的用户
grep --help | grep '\-q' #过滤grep -q的用法
#egrep过滤出该文件的存在ip形式的行
egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/sysconfig/network-scripts/ifcfg-ens33
3 sed流编辑器
3.1 sed简介
sed是一种在线的、非交互式的编辑器,它一次处理一行内容。处理时把当前处理的行存储在临时缓冲区中,称为“模式空间”( pattern space ),接着 用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
支持正则表达式:
3.2 sed命令格式及参数
(1)命令格式
sed [options] 'command' filename
(2)options选项
(3)sed的基本用法
#选项为r表示支持扩展元字符,这边做测试,不加选项i,加了就直接编辑了
sed -r 's/root/alice/' /etc/passwd #替换/etc/passwd文件中的第一个root为alice
sed -r 's/root/alice/g' /etc/passwd #全局替换/etc/passwd文件中的root为alice
sed -r 's/root/alice/gi' /etc/passwd #全局替换/etc/passwd文件中的root为alice,不区分大小写
sed -r 's/root/d' /etc/passwd #删除含有root的行
#若要编辑的文件中含有/,例如下面这个文件。要转义或者重定义,如\#
cat a.txt
/etc/abc/123
etc
sed -r '/\/etc\/abc\/123/d' a.txt #删除行
sed -r '\#/etc/abc/123#d' a.txt
sed -r 's#/etc/abc/123#/dev/sda1#' a.txt #替换
3.3 sed常见操作
(1)删除配置文件中的注释和无内容空行
#(1)删除#注释
cp /etc/vsftpd/vsftpd.conf conf
sed -ri '/^[ \t]*#/d' conf
#(2)删除//注释
sed -ri '\#^[ \t]*//#d' conf
#(3)删除无内容空行
sed -ri '^[ \t]*$/d' conf
#(4)删除注释及空行
sed -ri '/^[ \t]*#|^[ \t]*$/d' conf
(2)修改文件
#在conf文件最后追加内容
sed -ri '$a\chroot_local_user=YES' conf
cat conf
#找到以SELINUX=开头的这行,替换成一下内容。\c
sed -ri '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
cat /etc/selinux/config
#同理替换
sed -ri '/UseDNS/cUseDNS no' /etc/ssh/sshd_config
sed -ri '/GSSAPIAuthentication/cGSSAPIAuthentication no' /etc/ssh/sshd_config
(3)给文件添加注释
#给第三行到最后的行首零个或多个#替换成一个#
sed -ri '3,$s/^#*/#/' conf
#将30到50行的所有注释替换单个注释
sed -ri '30,50s/^[ \t]*#*/#/' /etc/nginx.conf
#将2-8行注释空行替换成单个注释
sed -ri '2,8s/^[ \t#]*/#/' /etc/nginx.conf
继续打卡学习,加油!