整体以及边界符号匹配
()的使用--组合为整体
括号内的字符串合起来作为一个整体进行处理
[root@node1 homework]# egrep '(13){1,}' phonenum.sh
13948495862
12345678912313
|的使用--就是或的意思
[root@node1 homework]# egrep '(hello)|crazy' phonenum.sh
hello world hi you are best !
I went crazy to work
\b单词边界--匹配确定的单词
如果你想要匹配某个你确定的单词可以这样写
\broot\b 是说匹配root这个单词但是broot是匹配不了的
[root@node1 homework]# egrep '\byou\b' phonenum.sh
hello world hi you are best !
\<的使用--指代单词的开头
[root@node1 homework]# egrep '\<yo' phonenum.sh
hello world hi you are best !
\>符号的使用
[root@node1 homework]# egrep 'ld\>' phonenum.sh
hello world hi you are best !
因此对于 /</> 的使用和 /b/b 是相同的
sed
流式编辑器
非交互式对文本进行增删改查等操作
逐行处理,并将结果输出到屏幕
我是目前是这样来使用sed的,sed 选择你处理文本的目的(直接修改,或者是打印你需要的内容)'正则匹配 命令 ' 文本(这里的正则匹配是说你想参与内容,命令是具体如何执行你的目的,比如你想直接修改你的内容,那么你可以选择 i 选项,继而你想删除某一行因此你需要选择 d命令,对于文本可以使一个文件也可以通过管道输入)
sed修改网卡配置实例:
sed -ri '/IPADDR/s/172.157.150.(.*)/192.168.150.\1/' /etc/sysconfig/network-scripts/ifcfg-ens160
sed -n '/^IPADDR/p' /etc/sysconfig/network-scripts/ifcfg-ens160
nmcli connection reload
nmcli connection up ens160
sed修改httpd服务器根目录
[root@node1 data]# sed -i 's#/var/www/html#/opt/wwwroot#' /etc/httpd/conf/httpd.conf
sed脚本实践-安装httpd服务并将80端口修改为82(此处忽略对于安全性能的考虑)
#!/bin/bash
yum install -y httpd &>/dev/null
echo "hello world " > /var/www/html/index.html
sed -i '/^Listen 80/s/80/82/' /etc/httpd/conf/httpd.conf
setenforce 0
systemctl stop firewalld
systemctl restart httpd
systemctl enable httpd
[root@node1 ~]# netstat -antulp | grep :82
tcp6 0 0 :::82 :::* LISTEN 45604/httpd
查看端口号
之前没有关注过netstat这个命令此处我记录一下
a 所有进程
n 以数字的形式显示内容
t tcp协议
u udp协议
p 端口号
[root@node1 homework]# netstat -antulp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 2198/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1255/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1249/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 40709/sendmail: acc
tcp 0 232 192.168.150.128:22 192.168.150.1:53265 ESTABLISHED 22578/sshd: root [p
tcp 0 0 192.168.150.128:22 192.168.150.128:45736 ESTABLISHED 50809/sshd: root [p
tcp 0 0 192.168.150.128:45736 192.168.150.128:22 ESTABLISHED 50808/ssh
tcp 0 0 192.168.150.128:22 192.168.150.1:52976 ESTABLISHED 20385/sshd: root [p
tcp 0 0 192.168.150.128:22 192.168.150.1:52979 ESTABLISHED 20435/sshd: root [p
tcp 0 0 192.168.150.128:22 192.168.150.1:25171 ESTABLISHED 44142/sshd: root [p
tcp 0 0 192.168.150.128:22 192.168.150.130:60296 ESTABLISHED 50187/sshd: root [p
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::82 :::* LISTEN 45604/httpd
tcp6 0 0 :::21 :::* LISTEN 1610/vsftpd
tcp6 0 0 :::22 :::* LISTEN 1255/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1249/cupsd
tcp6 0 0 :::3306 :::* LISTEN 1372/mysqld
udp 0 0 192.168.122.1:53 0.0.0.0:* 2198/dnsmasq
udp 0 0 0.0.0.0:67 0.0.0.0:* 2198/dnsmasq
udp 0 0 0.0.0.0:47203 0.0.0.0:* 1118/avahi-daemon:
udp 0 0 0.0.0.0:111 0.0.0.0:* 1/systemd
udp 0 0 0.0.0.0:123 0.0.0.0:* 1135/chronyd
udp 0 0 0.0.0.0:5353 0.0.0.0:* 1118/avahi-daemon:
udp 0 0 127.0.0.1:323 0.0.0.0:* 1135/chronyd
udp6 0 0 :::39595 :::* 1118/avahi-daemon:
udp6 0 0 :::111 :::* 1/systemd
udp6 0 0 :::5353 :::* 1118/avahi-daemon:
udp6 0 0 ::1:323 :::* 1135/chronyd
常用命令
打印模块,这里介绍如何使用sed输出你想要的内容
打印2 ~ 4行的内容 [root@node1 homework]# sed -n '2,4p' phonenum.sh 12345678912313 hello world hi you are best 打印1,4行的内容 [root@node1 homework]# sed -n '1p;3p' phonenum.sh 13948495862 hello world hi you are best ! 使用正则表达式去输出你想要的内容 [root@node1 homework]# sed -n '/^[^a-Z]/p' phonenum.sh 13948495862 12345678912313 注意一些特殊的地方 [root@node1 homework]# sed -n '$p' phonenum.sh SPACE X succeeded [root@node1 homework]# sed -n '/$/p' phonenum.sh 13948495862 12345678912313 hello world hi you are best ! I went crazy to work SPACE X succeeded 这俩个命令匹配的内容区别是在'$p'是说最后一行而另外一个是说所有含有$符号的内容 可以使用 cat -A 输出全部内容进行查看 [root@node1 homework]# cat -A phonenum.sh 13948495862$ 12345678912313$ hello world hi you are best !$ I went crazy to work$ SPACE X succeeded$ 留意$=的作用,他可以将你的行数输出 [root@node1 homework]# sed -n '$=' phonenum.sh 5
删除模块
删除第二行的内容 [root@node1 homework]# sed '2d' phonenum.sh 13948495862 hello world hi you are best ! I went crazy to work SPACE X succeeded 删除第二行到第四行的内容 [root@node1 homework]# sed '2,4d' phonenum.sh 13948495862 SPACE X succeeded 删除正则表达式的内容 [root@node1 homework]# sed '/^[^a-Z]/d' phonenum.sh hello world hi you are best ! I went crazy to work SPACE X succeeded $在这里可以代表最后一行,比如你想删除1到最后一行那么可以输入 [root@node1 homework]# sed '1,$d' phonenum.sh
替换模块
替换每一行的第一个1,替换的内容是一个字符换可以自行定义 [root@node1 homework]# sed 's/1/2/' phonenum.sh 23948495862 22345678912313 hello world hi you are best ! I went crazy to work SPACE X succeeded 替换第二个4 [root@node1 homework]# sed 's/4/ change /2' phonenum.sh 13948 change 95862 12345678912313 hello world hi you are best ! I went crazy to work SPACE X succeeded 同样的,这个也可以使用正则表达式去匹配你所需要的部分内容 [root@node1 homework]# sed '/^[^a-Z]/ s/4/ change /2' phonenum.sh 13948 change 95862 12345678912313 hello world hi you are best ! I went crazy to work SPACE X succeeded
处理文本块
i 行前插入文本
a 行后插入文本
c 替换当前行
记录一点小Tips
这是网络的配置文件
[root@node1 studyShell]# vim /etc/sysconfig/network-scripts/ifcfg-ens160