6. 正则符号说明
课程知识回顾
01. 课程知识回顾
文件属性章节:
ll -i /etc/hosts
33584339 -rw-r--r--. 2 root root 192 Apr 15 2019 /etc/hosts
1) inode信息:
inode是什么?
作用概述: 索引节点/存储文件属性信息
诞生过程: 磁盘格式化=创建文件系统
特点说明: inode号码相同,互为硬链接
block是什么?
作用概述: 数据块/存储文件具体内容
诞生过程: 磁盘格式化=创建文件系统
特点说明: 根据企业情况,调整block大小
企业面试题: 系统中文件读取原理??
2) 文件类型和文件权限
文件类型: 普通文件 - 目录文件 d 链接文件 l -- file
find tar which
文件权限: r=4 读 w=2 写 x=1 执行 - 没有权限 0
属主 属组 其他用户
3) 硬链接数
硬链接:
作用概述: 读取文件的多个入口
诞生过程: ln 源文件 链接文件
特点说明:
01. inode号码相同
02. 源文件删除,链接文件依旧有效
03. 目录无法创建硬链接
04. 创建出的新的目录硬链接数默认为2
软链接:
作用概述: 文件数据的快捷方式
诞生过程: ln -s 源文件 链接文件
特点说明:
01. 源文件删除,链接文件失效
02. 普通文件和目录都可以创建软链接
# 企业面试题: 如何将数据真正的删除?
01. 确保文件的硬链接数为0 i_link
02. 确保文件没有被进程占用 i_count
4) 属组和属主
用户的类型:
超级管理员 root 皇帝
虚拟用户 nobody 傀儡
普通用户 oldboy 平民
5) 文件时间信息
修改时间信息 mtime
访问时间信息 atime
改变时间信息 ctime
find /oxldboy -type f -mtime +7 --- 7天以前
find /oldboy -type f -mtime -7 --- 最近7天
find /oldboy -type f -mtime 7 --- 正好前面第7天
date命令如何使用
ntpdate命令进行时间同步
1. 系统符号学习作用
a 简化操作 .. ~ ; &&
b 进行匹配
2. 系统特殊符号
2.1 基础符号系列 $ ! |
# 基础符号系列
美元符号:$ 用户提示符
调取变量
取出指定列的信息(awk) awk '{print $3}' /oldboy/oldboy.txt
一行的结尾
叹号符号: ! 取反或者排除
取出最近的命令
强制操作处理 例如:wq! q!
井号符号: #
竖线符号: | 管道符号 前一个命令执行结果交给后面命令处理
xargs 命令|xargs 命令
xargs: 将信息进行分组显示
# 补充: 如何忽略别名功能:
01. 使用命令的绝对路径
02. 在命令执行前加撬棍
03. 在xargs信息后面命令自动忽略别名
# 查找指定数据信息进行复制 查找出*.txt文件,批量复制到/tmp目录
01. 将找到的信息放到cp 和 最终目录中间
find /oldboy -type f -name "*.txt"|xargs -i cp {} /oldgirl
02. 利用cp指明谁是数据最终保存的目录信息
find /oldboy -type f -name "*.txt"|xargs cp -t /oldgirl
# 查找指定数据信息进行移动 查找出*.txt文件,批量移动到/tmp目录
01. 将找到的信息放到cp 和 最终目录中间
find /oldboy -type f -name "*.txt"|xargs -i mv {} /oldgirl
02. 利用cp指明谁是数据最终保存的目录信息
find /oldboy -type f -name "*.txt"|xargs mv -t /oldgirl
2.2 引号符号系列 ("" '' `` 没有引号 )
# '' 输出的信息,所见即所得
[root@oldboyedu oldboy]# echo 'oldboy $LANG $oldgirl'
oldboy $LANG $oldgirl
# "" 和单引号功能类似 但对特殊信息会做解析
[root@oldboyedu oldboy]# echo "oldboy $LANG $oldgirl"
oldboy en_US.UTF-8 123
# ``($()) 将引号中的命令先执行,将执行结果交给引号外面的命令进行处理
# 没有引号 和双引号功能类似 但是可以直接识别通配符信息
2.3 重定向符号 > >> 2> 2>> < <<
>/1> 标准输出重定向符号
2> 错误输出重定向符号
>>/1> 标准输出追加重定向符号
2>> 错误输出追加重定向符号
# 如何将正确信息和错误信息都输出到文件中:(日志文件)
[root@oldboyedu oldboy]# cho oldboy >/oldboy/ok.txt 2>/oldboy/error.txt
[root@oldboyedu oldboy]# cat /oldboy/error.txt
-bash: cho: command not found
[root@oldboyedu oldboy]# echo oldboy >/oldboy/ok.txt 2>/oldboy/error.txt
[root@oldboyedu oldboy]# cat /oldboy/ok.txt
oldboy
# 方法一: 将正确和错误信息同时保留到一个文件
[root@oldboyedu oldboy]# echo oldboy >>/oldboy/info.log 2>>/oldboy/info.log
[root@oldboyedu oldboy]# cho oldboy >>/oldboy/info.log 2>>/oldboy/info.log
[root@oldboyedu oldboy]# cat /oldboy/info.log
oldboy
-bash: cho: command not found
# 方法二: 将正确和错误信息同时保留到一个文件
[root@oldboyedu oldboy]# echo oldboy &>/oldboy/info.log
[root@oldboyedu oldboy]# cat /oldboy/info.log
oldboy
[root@oldboyedu oldboy]# cho oldboy &>/oldboy/info.log
[root@oldboyedu oldboy]# cat /oldboy/info.log
-bash: cho: command not found
# 方法三: 将正确和错误信息同时保留到一个文件
[root@oldboyedu oldboy]# echo oldboy >/oldboy/info.log 2>&1
[root@oldboyedu oldboy]# cat /oldboy/info.log
oldboy
[root@oldboyedu oldboy]# cho oldboy >/oldboy/info.log 2>&1
[root@oldboyedu oldboy]# cat /oldboy/info.log
-bash: cho: command not found
< 标准输入重定向符号
tr < xargs <
<< 标准输入追加重定向符号
cat >>/oldboy.txt<<EOF
xXX
xXX
EOF
2.4 路径信息 ~ - .. .
# ../ 上一级目录
# ./ 当前路径
# ~ 返回到家目录
# - 两个目录之间进行快速切换 cd -
An argument of - is equivalent to $OLDPWD(环境变量)
# 补充说明:
[root@oldboyedu tmp]# cd $OLDPWD # 等价于 cd -
[root@oldboyedu oldboy]# cd $OLDPWD
[root@oldboyedu tmp]# cd $OLDPWD
[root@oldboyedu oldboy]# echo $OLDPWD
/tmp
[root@oldboyedu oldboy]# cd /tmp/
[root@oldboyedu tmp]# echo $OLDPWD
/oldboy
2.5 逻辑符号 && / ||
# && 与逻辑符号 前一个命令执行成功, 再执行后面的命令
# || 或逻辑符号 前一个命令执行失败, 再执行后面的命令
# &&符号实践操作:
[root@oldboyedu tmp]# # 需求: 想创建一个/alex目录, 在目录中创建一个oldboy.txt 一条命令搞定
[root@oldboyedu tmp]# mkdi /alex ; touch /alex/oldboy.txt -------两个命令都报错
-bash: mkdi: command not found
touch: cannot touch ‘/alex/oldboy.txt’: No such file or directory
[root@oldboyedu tmp]# mkdi /alex && touch /alex/oldboy.txt ----前面的命令报错,不执行后面的命令
-bash: mkdi: command not found
[root@oldboyedu tmp]# mkdir /alex && touch /alex/oldboy.txt
[root@oldboyedu tmp]# ll /alex/oldboy.txt
-rw-r--r--. 1 root root 0 Oct 10 03:00 /alex/oldboy.txt
# ||符号实践操作
[root@oldboyedu tmp]# # 需求: /alex/oldboy.txt删除失败了,在/alex/error.txt文件中生成失败信息
[root@oldboyedu tmp]# rmx /alex/oldboy.txt || echo "failed" >>/alex/error.txt
-bash: rmx: command not found
[root@oldboyedu tmp]# cat /alex/error.txt
failed
[root@oldboyedu tmp]# rm /alex/oldboy.txt || echo "failed" >>/alex/error.txt
[root@oldboyedu tmp]# cat /alex/error.txt
failed
3. 系统通配符号 *
匹配文件名称信息
# 利用通配符号匹配文件名称信息
# * 模糊匹配所有内容 oldboy old ol o*
find -name "*.txt"
ll /oldboy/*.txt
# {} 生成序列信息 (生成一行序列)
# 生成连续序列
echo {1..10}
echo {01..100}
echo {a..z}
echo {A..Z}
# 生成不连续序列
echo {1..10..2} 奇数序列
echo {2..10..2} 奇数序列
echo {www,bbs,blog}
# 生成组合序列
[root@oldboyedu tmp]# echo {A,B}{01,02}
A01 A02 B01 B02
[root@oldboyedu tmp]# echo A{01,02}
A01 A02
[root@oldboyedu tmp]# echo A{,02}
A A02
# 快速备份文件数据方法
[root@oldboyedu tmp]# # cp /oldboy/oldboy.txt /oldboy/oldboy.txt.bak
[root@oldboyedu tmp]# echo oldboy.txt{,bak}
oldboy.txt oldboy.txtbak
[root@oldboyedu tmp]# echo oldboy.txt{,.bak}
oldboy.txt oldboy.txt.bak
[root@oldboyedu tmp]# echo /oldboy/oldboy.txt{,.bak}
/oldboy/oldboy.txt /oldboy/oldboy.txt.bak
[root@oldboyedu tmp]# cp /oldboy/oldboy.txt{,.bak} --最终命令
# 测试题:
# 01. 在/oldboy目录中创建alex.txt文件,并在/oldboy目录中生成alex.txt.ori备份文件
mkdir /oldboy
touch alex.txt
cp /oldboy/alex.txt{,.ori}
# 02. 如何将备份文件快速还原
rm /oldboy/alex.txt -f
mv /oldboy/alex.txt{.ori,}
# 快速还原
mv /oldboy/alex.txt.ori /oldboy/alex.txt
4. 正则符号
匹配文件内容信息
# 正则符号
1. 利用正则符号匹配文件内容信息
2. 正则符号经常出现在各种开发语言中, python java php
3. 正则符号经常被三剑客命令使用
# 基础正则符号: basic regular expression BRE
# 1. 尖角符号:^
以什么开头的信息 ll /oldboy|grep "^d"
# 2. 美元符号:$
以什么结尾的信息 ll -F /etc/|grep /$
# 创建测试环境:
cat >>/oldboy/oldboy.txt<<EOF
# oldboyedu-sz-01
oldboy-linux
oldboy-python-linux
# oldboyedu-sh
oldboy-linux
oldboy-python-linux
# oldboyedu-bj
oldboy-linux
java
mysql
go
python
EOF
[root@oldboyedu tmp]# cat /oldboy/oldboy.txt
# oldboyedu-sz-01
oldboy-linux
oldboy-python-linux
# oldboyedu-sh
oldboy-linux
oldboy-python-linux
# oldboyedu-bj
oldboy-linux
java
mysql
go
python
# 01. 将以oldboy开头的行找出来?
grep "^oldboy" 文件中过滤
grep "^oldboy" 文件中过滤
发屁
cat 文件|grep "^oldboy"
脱裤子 发屁
# 02. 将以linux结尾的行找出来?
grep "linux$" 文件中过滤
# 03. 将全部内容显示,但不要显示空行
^oldboy linux$
^$ -- 空行
grep -v "^$" 文件中过滤
# 3. 尖号美元:^$
空行符号
# 扩展正则符号: extended regular expression ERE
课程内容总结
01. 系统符号
1. 系统常用符号 # $
2. 路径系列符号 ~ - .. .
3. 重定向符号 > >> 2> 2>> < <<
4. 逻辑符号 && ||
5. 引号符号 "" '' `` 没有引号
02. 通配符号 根据文件名称进行筛选过滤
* 模糊匹配字符
{} 生成序列信息 / 生成组合序列 (快速备份文件/快速恢复文件)
03. 正则符号 根据文件内容进行筛选过滤
1. 基础正则符号 grep sed awk 马云
2. 扩展正则符号 grep? sed? awk 贝索斯 亚马逊
课程知识回顾:
1) 系统符号:
基础系列: # $ ! |
引号系列: '' "" ``=$() 没引号
定向符号: > >> 2> 2>> < <<
路径符号: . .. ~ -=$OLDPWD
逻辑符号: && || mkdir /oldboy && touch /oldboy/oldboy.txt || echo "目录已经存在,无须创建"
2) 通配符号: 用于匹配文件名称信息
* 模糊匹配信息:
{}生成序列信息: 有序序列 无序序列 组合序列(快速备份和恢复文件)
3) 正则符号
基础正则符号: grep sed awk
^ 以什么开头的信息进行匹配:
[root@oldboyedu ~]# grep "^old" /oldboy/oldboy.txt
oldboy-linux
oldboy-python-linux
oldboy-linux oldboy01
oldboy-python-linux
oldboy-linux
[root@oldboyedu ~]# sed -n '/^old/p' /oldboy/oldboy.txt
oldboy-linux
oldboy-python-linux
oldboy-linux oldboy01
oldboy-python-linux
oldboy-linux
[root@oldboyedu ~]# awk '/^old/' /oldboy/oldboy.txt
oldboy-linux
oldboy-python-linux
oldboy-linux oldboy01
oldboy-python-linux
oldboy-linux
$ 以什么结尾的信息进行匹配
^$取出文件中的空行内容
grep -v "^$" /oldboy/oldboy.txt
5. 正则符号
# 测试环境:
cat >>~/oldboy_test.txt<<EOF
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
EOF
基础正则符号
5.1 点符号 .
- 匹配任意一个字符,且只有一个字符
# 命令执行结果:
[root@oldboyedu ~]# grep "." ~/oldboy_test.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
# 显示匹配过程: -o
[root@oldboyedu ~]# grep "." ~/oldboy_test.txt -o
I
a
m
o
l
d
5.2 星符号 *
- 匹配前一个字符连续出现了0次或者多次
[root@oldboyedu ~]# grep "0*" ~/oldboy_test.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
5.3 点和星结合: .* 匹配任意所有信息 .* == *
[root@oldboyedu ~]# grep "^m.*m$" ~/oldboy_test.txt
my blog is http://oldboy.blog.51cto.com
# 问题: 贪婪匹配问题:
[root@oldboyedu ~]# grep "^m.*o" ~/oldboy_test.txt
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
# 指定具体信息阻止贪婪匹配
[root@oldboyedu ~]# grep "^m.*to" ~/oldboy_test.txt
my blog is http://oldboy.blog.51cto.com
5.4 转义符号: \
# 将文件中的以 . 结尾的信息进行过滤??
# \作用:
01. 将有特殊意义符号,转义成普通信息进行识别
02. 将没有意义的信息转义为有特殊意义的信息
# \n 换行符号
# \t 制表符号
# 换行符号作用:
[root@oldboyedu ~]# echo "oldboy01oldboy02"
oldboy01oldboy02
[root@oldboyedu ~]# echo "oldboy01\noldboy02\noldboy03"
oldboy01\noldboy02\noldboy03
[root@oldboyedu ~]# echo -e "oldboy01\noldboy02\noldboy03"
oldboy01
oldboy02
oldboy03
[root@oldboyedu ~]# echo -e "oldboy01\noldboy02\noldboy03" >oldboy.txt
[root@oldboyedu ~]# cat oldboy.txt
oldboy01
oldboy02
oldboy03
[root@oldboyedu ~]# grep ".$" oldboy_test.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
0101010101
11111
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu ~]# grep "\.$" oldboy_test.txt
I teach linux.
my qq num is 49000448.
not 4900000448.
5.5 括号符号:[ ]
# 匹配多个字符信息
[root@oldboyedu ~]# grep "oldb[oe]y" oldboy_test.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
# 问题: 将以I开头和m开头的行都找出来?
[root@oldboyedu ~]# grep "^[Im]" oldboy_test.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
my qq num is 49000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu ~]# grep "^[a-Z]" /etc/selinux/config
SELINUX=enforcing
SELINUXTYPE=targeted
5.6 括号和尖号组合 [^]
# 排除符号
[root@oldboyedu ~]# grep "[abc]" oldboy_test.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu ~]# grep "[^abc]" oldboy_test.txt //排除包含a、b、c的字符
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
0101010101
11111
my god ,i am not oldbey,but OLDBOY!
扩展正则符号:
-
扩展正则符号默认 grep sed不能直接识别
-
grep 提升自己 -- egrep/grep -E
-
sed 提升自己 -- sed -r
1. +号符号:
# 匹配前一个字符连续出现了1次或者多次
[root@oldboyedu ~]# grep "0*" oldboy_test.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu ~]# grep "0+" oldboy_test.txt
[root@oldboyedu ~]# egrep "0+" oldboy_test.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu ~]# egrep "0+" oldboy_test.txt -o
000
00000
张三 110105199004067631
李四 104105199004067631
赵六 oldboy
王五 104105199004067631
# 找出身份证信息输入错误的内容
[root@oldboyedu ~]# grep [0-9] oldboy_test02.txt
张三 110105199004067631
李四 104105199004067631
王五 104105199004067631
[root@oldboyedu ~]# grep -E "[0-9]+" oldboy_test02.txt
张三 110105199004067631
李四 104105199004067631
王五 104105199004067631
[root@oldboyedu ~]# grep -E "[0-9]+" oldboy_test02.txt -o
110105199004067631
104105199004067631
104105199004067631
[root@oldboyedu ~]# grep -Ev "[0-9]+" oldboy_test02.txt
赵六 oldboy
2. 竖线符号:|
# 并且符号,用于匹配多个信息
[root@oldboyedu ~]# grep -E "oldboy|oldbey" oldboy_test.txt ---字符串之间
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu ~]# grep -E "oldb[oe]y" oldboy_test.txt ---字符之间
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
3. 括号符号: ()
# 作用:
# 1. 指定信息进行整体匹配
[root@oldboyedu ~]# grep "oldb[oe]y" oldboy_test.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu ~]# grep "oldboey" oldboy_test.txt
my god ,i am not oldboey,but OLDBOY!
[root@oldboyedu ~]# grep -E "oldb(oe)y" oldboy_test.txt
my god ,i am not oldboey,but OLDBOY!
[root@oldboyedu ~]# grep -E "oldb(o|e)y" oldboy_test.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
# 2. 进行后项引用前项使用: sed命令替换功能
# 批量创建用户 oldboy01..oldboy10
[root@oldboyedu ~]# echo oldboy{01..10}
oldboy01 oldboy02 oldboy03 oldboy04 oldboy05 oldboy06 oldboy07 oldboy08 oldboy09 oldboy10
[root@oldboyedu ~]# echo oldboy{01..10}|xargs
oldboy01 oldboy02 oldboy03 oldboy04 oldboy05 oldboy06 oldboy07 oldboy08 oldboy09 oldboy10
[root@oldboyedu ~]# echo oldboy{01..10}|xargs -n1
oldboy01
oldboy02
oldboy03
oldboy04
oldboy05
oldboy06
oldboy07
oldboy08
oldboy09
oldboy10
[root@oldboyedu ~]# echo oldboy{01..10}|xargs -n1|sed 's#(.*)#useradd \1#g'
sed: -e expression #1, char 19: invalid reference \1 on `s' command's RHS
xargs: echo: terminated by signal 13
[root@oldboyedu ~]# echo oldboy{01..10}|xargs -n1|sed -r 's#(.*)#useradd \1#g' ---\1表示引用前面()里的内容
useradd oldboy01
useradd oldboy02
useradd oldboy03
useradd oldboy04
useradd oldboy05
useradd oldboy06
useradd oldboy07
useradd oldboy08
useradd oldboy09
useradd oldboy10
[root@oldboyedu ~]# echo oldboy{01..10}|xargs -n1|sed -r 's#(.*)#useradd \1#g'|bash
useradd: user 'oldboy02' already exists
useradd: user 'oldboy03' already exists
useradd: user 'oldboy04' already exists
useradd: user 'oldboy05' already exists
useradd: user 'oldboy06' already exists
useradd: user 'oldboy07' already exists
useradd: user 'oldboy08' already exists
useradd: user 'oldboy09' already exists
useradd: user 'oldboy10' already exists
# 企业面试题: 批量创建用户 oldboy01..oldboy10,并给每个用户设置密码信息,默认初始化密码(123456)
01. 如何创建用户 给用户设置密码
02. 基础命令 echo {}/seq -w 10
03. sed命令替换信息方法
04. 正则符号 .* ()
05. 基础符号 ; |
06. bash内置命令
[root@oldboyedu ~]# seq -w 10|sed -r 's#(.*)#useradd oldboy\1;echo 123456|passwd --stdin oldboy\1#g'|bash
useradd oldboy01;echo 123456|passwd --stdin oldboy01
useradd oldboy02;echo 123456|passwd --stdin oldboy02
useradd oldboy03;echo 123456|passwd --stdin oldboy03
useradd oldboy04;echo 123456|passwd --stdin oldboy04
useradd oldboy05;echo 123456|passwd --stdin oldboy05
useradd oldboy06;echo 123456|passwd --stdin oldboy06
useradd oldboy07;echo 123456|passwd --stdin oldboy07
useradd oldboy08;echo 123456|passwd --stdin oldboy08
useradd oldboy09;echo 123456|passwd --stdin oldboy09
useradd oldboy10;echo 123456|passwd --stdin oldboy10
# 将输出的信息
echo 123456 ==> 转换为 <123456>进行显示
[root@oldboyedu ~]# # echo 123456 ==> 转换为 <123456>进行显示
[root@oldboyedu ~]# echo 123456
123456
[root@oldboyedu ~]# echo 123456|sed -r 's#([1-6]+)#\1#g'
123456
[root@oldboyedu ~]# echo 123456|sed -r 's#([1-6]+)#<\1>#g'
<123456>
[root@oldboyedu ~]# echo 123456|sed -r 's#(.*)#<\1>#g'
<123456>
echo 123456 ==> 转换为 <12><34><56>进行显示
[root@oldboyedu ~]# # echo 123456 ==> 转换为 <12><34><56>进行显示
[root@oldboyedu ~]# echo 123456
123456
[root@oldboyedu ~]# echo 123456|sed -r "s#(12)(34)(56)#<\1><\2><\3>#g"
<12><34><56>
[root@oldboyedu ~]# echo 123456|sed -r "s#(12)(34)(56)#<\1><><\3>#g"
<12><><56>
[root@oldboyedu ~]# echo 123456|sed -r "s#(12)(34)(56)#<\1><\3><\3>#g"
<12><56><56>
[root@oldboyedu ~]# echo 123456|sed -r "s#(..)(..)(..)#<\1><\2><\3>#g"
<12><34><56>
echo 123456 ==> 转换为 <12>34<56>进行显示
# echo 123456|sed -r "s#(..)(..)(..)#<\1>\2<\3>#g"
4. 括号符号:{}
# 可以指定字符连续匹配的次数
# 第一种情况: x{n,m} 表示前一个字符至少连续出现n次,最多出现m次
[root@oldboyedu ~]# grep -E "0{2,3}" oldboy_test.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu ~]# grep "0+" oldboy_test.txt
[root@oldboyedu ~]# grep -E "0+" oldboy_test.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu ~]# grep -E "0+" oldboy_test.txt -o
000
00000
[root@oldboyedu ~]# grep -E "0{2,3}" oldboy_test.txt -o
000
000
00
[root@oldboyedu ~]# grep -E "0{2,4}" oldboy_test.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu ~]# grep -E "0{2,4}" oldboy_test.txt -o
000
0000
# 第二种情况: x{n} 表示前一个字符正好连续出现了n次
[root@oldboyedu ~]# grep -E "0{2}" oldboy_test.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu ~]# grep -E "0{2}" oldboy_test.txt -o
00
00
00
# 第三种情况: x{n,} 表示前一个字符至少连续出现n次,最多出现多少次不限
[root@oldboyedu ~]# grep -E "0{2,}" oldboy_test.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu ~]# grep -E "0{2,}" oldboy_test.txt -o
000
00000
# 第四种情况: x{,m} 表示前一个字符至少连续出现0次,最多出现m次
[root@oldboyedu ~]# grep -E "0{,2}" oldboy_test.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
my god ,i am not oldboey,but OLDBOY!
[root@oldboyedu ~]# grep -E "0{,2}" oldboy_test.txt -o
00
0
00
00
0
5. 问号符号 ?
总结
* 匹配前一个字符出现0次或者多次
+ 匹配前一个字符出现1次或者多次
{} 匹配前一个字符指定出现多少次,至少0次
? 匹配前一个字符出现0次或者1次
# 定义匹配前一个字符出现0或者1次
# 创建一个测试环境:
cat >>oldboy_test03.txt<<EOF
gd
god
good
goood
gooood
EOF
[root@oldboyedu ~]# grep "o*" oldboy_test03.txt
gd
god
good
goood
gooood
[root@oldboyedu ~]# egrep "o+" oldboy_test03.txt
god
good
goood
gooood
[root@oldboyedu ~]# egrep "o?" oldboy_test03.txt
gd
god
good
goood
gooood
[root@oldboyedu ~]# egrep "o?" oldboy_test03.txt -o
o
o
o
o
o
o
o
o
o
o
[root@oldboyedu ~]# egrep "o+" oldboy_test03.txt -o
o
oo
ooo
oooo
# 补充: 想让grep sed命令可以直接识别扩展正则
[root@oldboyedu ~]# grep "o\+" oldboy_test03.txt
god
good
goood
gooood
[root@oldboyedu ~]# grep -E "0{,2}" oldboy_test.txt^C
[root@oldboyedu ~]# echo 123456|sed "s#\(..\)\(..\)\(..\)#<\1><\2><\3>#g"
<12><34><56>
利用ip address show eth0只把IP地址信息显示出来?
# 利用ip address show eth0只把IP地址信息显示出来?
[root@oldboyedu ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:81:57:66 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::31af:a93d:2d09:e293/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@oldboyedu ~]# ip a s eth0|grep "[0-9].[0-9].[0-9].[0-9]"
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@oldboyedu ~]# ip a s eth0|grep "[0-9]+.[0-9]+.[0-9]+.[0-9]+"
[root@oldboyedu ~]# ip a s eth0|egrep "[0-9]+.[0-9]+.[0-9]+.[0-9]+"
link/ether 00:0c:29:81:57:66 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@oldboyedu ~]# ip a s eth0|egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@oldboyedu ~]# ip a s eth0|egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" -o
10.0.0.200
10.0.0.255
[root@oldboyedu ~]# ip a s eth0|egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" -o|head -1
10.0.0.200
===============================
[root@oldboyedu ~]# ip a s eth0|egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.)"
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.)" -o
10.
0.
0.
10.
0.
0.
[root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.){3}[0-9]+" -o
10.0.0.200
10.0.0.255
[root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.?){4}" -o
1500
1000
10.0.0.200
10.0.0.255
[root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.?){4}"
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@oldboyedu ~]#
[root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.?){4}" -o
1500
1000
10.0.0.200
10.0.0.255
[root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.?){4}" -o|head -3|tail -1
10.0.0.200
作业:
01. sed/awk命令如何进行排除过滤? grep -v
02. 批量创建用户 oldboy01..oldboy10,并给每个用户设置随机密码信息
07. shell
1) 如何生成随机信息
2) 变量设置
3) 循环语句
03. 取IP地址/取权限数值 利用grep/sed/awk + 正则符号
04. sed