昨日内容回顾
1.写出过滤手机号的正则表达式
1[0-9]{10}
1开头 0-9的数字 十位
2.写出过滤邮箱的正则表达式
[a-zA-Z0-9-_]+@[a-z0-9]+\.(com|cn|com\.cn|net)
小a到小z大A到大Z0-9数字杠下划线 至少一位 @ 小a到小z0-9数字 至少一位 点 com或cn或com.cn或net
3.过滤密码,要求必须要大写字母、小写字母、数字以及下划线,长度在 8 到 16 之间
([A-Z]+[a-z]+[0-9]+_+){8,16}
大A到大Z至少一位 小a到小z至少一位 0-9数字至少一位 下划线至少一位 8到16位
4.过滤本地的IP
ip a | grep -E '([(1[0-9]{2}){3}(2[0-4][0-9]){3}(25[0-4]){3}[0-9]{1,2}]\.){3}[(1[0-9]{2}){3}(2[0-4][0-9]){3}(25[0-4]){3}[0-9]{1,2}]'
查看IP信息给grep取匹配 1开头0-9数字两位 》三位 2开头0-4数字0-9数字 》三位 25开头0-4 数字 》3位 0-9数字 》1位到2位 点 》》3位 1开头0-9数字两位 》三位 2开头0-4数字0-9数字 》三位 25开头0-4数字 》3位 0-9数字 》1位到2位
今日内容概要
内容详细
文本处理命令
# 1.sort命令
用于将文件的内容加以排序(不加参数 默认用每行第一个字符排序)
sort 参数 文件
参数:
-n : 依照数字的值的大小排序
-r : 以相反的顺序来排序(降序)
-k : 以某列进行排序(按照指定范围比较)
-t : 指定分隔符 默认是以空格为分隔符
-b : 忽略每一行前的所有空白字符,从第一个可见字符比较
-f : 忽略字母大小写,默认情况下,会将大写字母排在前面
案例:
sort 1.txt # 输出的文件内容是依照第一个字符排序
sort -n 1.txt # 依照数字的值的大小排序显示
cat 1.txt | sort -n -r -k3 -t '|' # 以|分割的第三列 反序来排序
# 2.uniq命令
用于检查及删除文本内容中重复出现的行列 一般与sort连用
在单独使用时 只会把文本内相邻的行去重 不相邻不去重
所以先用sort排序再去重
uniq 参数 文件
参数:
-c : 在每行开头显示该行出现的次数
-d : 仅显示重复的内容
-u : 仅显示未重复的内容
案例:
sort 1.txt | uniq -u # 输出的只有未重复的内容
sort 1.txt | uniq -d # 输出的只有重复的内容
# 3.cut命令
显示行中的指定部分,删除文件中指定字段
cut 参数 文件
参数:
-d : 指定字段的分隔符,默认的字段分隔符为"TAB"
-f+n : 显示指定字段的内容
案例:
cut -d '|' -f3 1.txt # 只显示按|分割后的 第三列内容
# 4.tr命令
替换或删除命令
tr不能直接加文件使用
tr 被替换内容 新内容
参数:
-d : 删除字符(不会被显示出来)
案例:
cat 1.txt | tr 01 908 # 文本内容中的0被替换为9 1被替换为0 一一对应替换
cat 1.txt | tr -d 2 # 文本内容中的2 不会显示
# 5.wc命令
统计 计算数字
参数:
-c : 统计文件的bytes数
-l : 统计文件的行数
-w : 统计文件中单词的个数 默认以空白字符为分隔符
案例:
cat 2.txt | wc -c # 文本末尾会默认有空格占用一个bytes 所以查询结果是内容的bytes数+1
wc -c 2.txt # 会显示bytes数+1 +文件名
'''
在Linux中 一段连续的数字或字母为一个单词
wc统计时 默认以空格来表示当前单词结束 开始下一个
'''
三剑客之sed
# sed是linux中,流媒体编辑器
grep : 过滤文本
sed : 修改文本
awk : 处理文本
# 1.格式
sed 参数 '处理规则' 操作对象
参数:
-e : 允许多项编辑
案例:
sed '3d' 1.txt # 除了第三行 其他都正常显示
sed -e '3d' -e '6d' 1.txt # 除了第三行第六行 其他都正常显示
-n : 取消默认输出
案例:
sed -e '3d' -e '6d' -n 1.txt # 不会显示内容(d:删除模式)
sed -n '5p' 1.txt # 只打印第五行 其余内容不输出(p:打印模式)
-i : 就地编辑(将操作的内容直接写入文本中 不需要通过vim或echo)
案例:
sed -i '5p' 1.txt # 将第五行的内容再写入到文本 同样内容会出现两次
sed -i '5d' 1.txt # 把第五行内容直接从文本中删除
-r : 支持拓展正则
// : 表示正则
案例:
sed -r '/23/d' 1.txt # 删除正则匹配到的所有包含 23 的行
-f : 指定sed匹配规则脚本文件
案例:
1.txt内容为: /23/d
sed -f 1.txt 2.txt # 执行结果等同于 sed -r '/23/d' 1.txt
# 2.定位
1.数字定位法
案例:
指定行号
sed '3d' 1.txt # 第三行删除
sed '3,4d' 1.txt # 第三行到第四行删除
2.正则定位法
案例:
指定正则定位
sed '/g/d' 2.txt # 包含g的行都删除
3.数字和正则定位法
案例:
sed '2,/^g/d' 2.txt # 第二行到以g开头的行都删除
4.正则正则定位法
案例:
sed '/^q/,/^y/d' 2.txt # 以q开头的行到以y开头的行都删除
# 3.sed的编辑模式
d : 删除
p : 打印
a : 在当前行之后添加一行或多行
案例:
sed '2axxx123' 2.txt # 在第二行之后添加一行内容 xxx123
c : 用新文本修改(替换)当前行
案例:
sed '2cxxx /123' 2.txt # 第二行内容显示为 xxx /123
i : 在当前行之前,插入文本(单独使用时)
案例:
sed '2ixxx /123' 2.txt # 第二行内容显示为 xxx /123 原第二行顺延至第三行
r : 在文件中读其他文件内容(插入到文件每行之后)
案例:
sed '2r 1.txt' 2.txt # 1.txt的所有内容都插入到 2.txt的第二行之后显示
sed 'r 1.txt' 2.txt # 1.txt的所有内容都插入到 2.txt的每一行之后显示
w : 将文件指定行写入其他文件
案例:
sed '2w 1.txt' 2.txt # 将2.txt文件的第二行 写入(覆盖模式)到1.txt中
y : 将字符转换成另一个字符
案例:
sed 'y/qg/AB/' 1.txt # 将1.txt文件中的 q替换为A g替换为B 一一对应替换
s : 将字符串转换成另一个字符串(每一行 只替换一次)
案例: # 不是字符一一对应了 而是一串对应一串
sed 's/qe/A/' 2.txt # 将2.txt文件中 qe(必须连在一起)整体替换为 A 但是如果同一行不止一处 qe 则只会从左往右替换一处就停止该行匹配
g : 全部执行
案例:
sed 's/qe/A/g' 2.txt # 将2.txt文件中 qe(必须连在一起)整体替换为 A 无论一行有几处 qe 全部完成替换
i : 忽略大小写(要跟s 模式连用)
案例:
2.txt中只有小写字母
sed 's/G/B/gi' 2.txt # 将2.txt中的 g无论大小写 全部替换为B
& : 代表前面匹配的内容
# 练习
1.将/etc/nginx/nginx.conf中的注释行全部去掉
sed '/^ *#/d' /etc/nginx/nginx.conf
2.将/etc/nginx/nginx.conf中每一行之前增加注释
sed 's/.*/# &/g' /etc/nginx/nginx.conf
3.要求一键修改本机的ip 100>>101
sed -i 's/.100/.101/g' /etc/sysconfig/network-scripts/ifcfg-eth[01]
4.将/etc/passwd中的root修改成ROOT
sed 's/root/ROOT/g' /etc/passwd