正则表达式分两类:python
. 匹配任意单个字符,能够是一个汉字 [] 匹配指定范围的任意单个字符,例如:[grain] [0-9] [a-z] [^] 匹配指定范围外的任意单个字符,例如:[^grain] [:alnum:] 字母和数字 [:alpha:] 表明任何英文大小写字母,即a-z,A-Z [:lower:] 小写字母,至关于a-z [:upper:] 大写字母 [:blank:] 空白字符 [:space:] 水平和垂直的空白字符 [:digit:] 十进制数字 ……
用在要指定次数的字符后面,用于指定前面的字符要出现的次数git
* 匹配前面的字符任意次,包括0次 .* 任意长度的任意字符 \? 匹配其前面的字符0或1次 \+ 匹配其前面的字符至少1次 \{n\} 匹配前面的字符n次 \{m,n\} 匹配前面的字符至少m次,至多n次 \{,n\} 匹配前面的字符至多n次,<=n \{n,\} 匹配前面的字符至少n次
^ 行首锚定,用于模式的最左侧 $ 行尾锚定,用于模式的最右侧 ^PATTERN$ 用于模式匹配整行 ^$ 空行 ^[:space:]$ 空白行 \< 词首锚定,用于单词模式的左侧 \> 词尾锚定,用于单词模式的右侧 \<PATTERN\> 匹配整个单词
分组:()将多个字符捆绑在一块儿,看成一个总体处理,例如:\(root\)+正则表达式
后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录与内部的变量中,这些变量的命名方式为:\1,\2,\3……, \1 表示从左侧起第一个左括号以及与之匹配右括号之间模式匹配到的字符shell
或者: \|vim
\(string1\(string2\)\) \1: string1\(string2\) \2: sting2
. 匹配任意单个字符,能够是一个汉字 [] 匹配指定范围的任意单个字符,例如:[grain] [0-9] [a-z] [^] 匹配指定范围外的任意单个字符,例如:[^grain] [:alnum:] 字母和数字 [:alpha:] 表明任何英文大小写字母,即a-z,A-Z [:lower:] 小写字母,至关于a-z [:upper:] 大写字母 [:blank:] 空白字符 [:space:] 水平和垂直的空白字符 [:digit:] 十进制数字 ……
* 匹配前面字符任意次 ? 0或1次 + 1次或屡次 {n} 匹配n次 {m,n} 至少m,至多n次
^ 行首 $ 行尾 \<,\b 词首 \>,\b 词尾
() 分组 后向引用:\1,\2,... | 或者 a|b #a或b C|cat #C或cat (C|c)at #Cat或cat
做用:文本搜索工具,根据用户指定的“模式”对目标逐行进行匹配检查,打印匹配到的行bash
模式:由正则表达式字符及文本字符所编写的过滤条件ide
格式:工具
grep [OPTIONS] PATTERN [FILE...]
常见选项:spa
--color=auto 对匹配到的文本着色显示 -m # 匹配#次后中止 -v 显示不被pattern匹配到的行 -i 忽略字符大小写 -n 显示匹配的行号 -c 统计匹配的行数 -o 仅显示匹配到的字符串 -q 静默模式,不输出任何信息 -A # 后#行 -B # 前#行 -C # 先后各#行 -e 多个选项间逻辑or关系 如:grep -e 'cat' -e 'dog' file -w 匹配整个单词 -E 使用ERE,至关于egrep -f file 根据模式文件处理 -r 递归目录,但不处理软连接 -R 递归目录,并处理软连接 [root@CentOS8 ~]#df | grep '/dev/sd' /dev/sda2 104806400 2311224 102495176 3% / /dev/sda5 52403200 402140 52001060 1% /data /dev/sda1 1038336 172128 866208 17% /boot [root@CentOS8 ~]#df|grep '^/dev/sd'|tr -s ' ' %|cut -d% -f5|sort -n|tail -1 17
格式:操作系统
sed [option]... 'script;script;...' inputfile...
经常使用选项:
-n 不输出模式空间内容到屏幕,即不自动打印 -e 多点编辑 -f file 从指定文件中读取编辑脚本 -r,-E 使用扩展正则表达式 -i 原处编辑,加后缀表明备份并编辑
script格式:
'地址命令'
地址格式:
1. 不给地址: 对全文进行处理 2. 单地址: #:指定的行, $:最后一行 /pattern/: 被此处模式所匹配到的每一行 3. 地址范围: #,# 从#行到#行,3,6 从第3行到第6行 #,+# 从#行到+#行,3,+4 从3行到第7行 4. 步长:~ 1~2 奇数行 2~2 偶数行
命令:
p 打印当前模式空间内容,追加到默认输出以后 Ip 忽略大小写输出 d 删除模式空间匹配的行,并当即启用下一轮循环 a [\\]text 之指定行后面追加文本,支持使用\n实现多行追加 i [\\]text 在行前面插入文本 c [\\]text 替换行为单行或多行文本 w /path/file 保存模式匹配的行至指定文件 r /path/file 读取指定文件的文本至模式空间中匹配到的行后 = 为模式空间中的行打印行号 ! 模式空间中匹配行取反 s/pattern/string/修饰符 查找替换,支持使用分隔符,也可使用:s@@@,s### 替换修饰符: g 行内全局替换 p 显示替换成功的行 w /path/file 将替换成功的行保存到文件中 I,i 忽略大小写 [root@CentOS8 ~]#sed -n '1,4p' /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin [root@CentOS8 ~]#
格式:
awk [OPTIONS] 'program' var=value file... awk [OPTIONS] -f programfile var=value file...
说明:
program一般是被放在单引号中,并能够由三种部分组成
常见选项:
Program格式:
pattern{action;...}
pattern:决定动做语句什么时候触发及触发事件,好比:BEGIN,END,正则表达式等
action:对数据进行处理,放在{}内指明,常见:print,printf
动做 print
格式:
print item1,item2,...
说明:
[root@CentOS8 ~]#awk -F: -v OFS=':' '/root/{print $1,$3,$7}' /etc/passwd root:0:/bin/bash operator:11:/sbin/nologin [root@CentOS8 ~]#
[root@CentOS8 ~]#echo `grep -v '/sbin/nologin' /etc/passwd |wc -l` && grep -v '/sbin/nologin' /etc/passwd | cut -d: -f1 12 root sync shutdown halt lee num number mageia slackware user1 user2 user3 [root@CentOS8 ~]#awk '!/\/sbin\/nologin/{print $NF}' /etc/passwd | wc -l 12 [root@CentOS8 ~]#awk -F: '!/\/sbin\/nologin/{print $1}' /etc/passwd root sync shutdown halt lee num number mageia slackware user1 user2 user3 [root@CentOS8 ~]#echo `awk '!/\/sbin\/nologin/{print $NF}' /etc/passwd | wc -l` && awk -F: '!/\/sbin\/nologin/{print $1}' /etc/passwd 12 root sync shutdown halt lee num number mageia slackware user1 user2 user3 [root@CentOS8 ~]#
[root@CentOS8 ~]#awk -F: '{print $1,$3,$7}' /etc/passwd | sort -nr -k2|head -n1 nobody 65534 /sbin/nologin [root@CentOS8 ~]#getent passwd | sort -t: -k3 -n|tail -n1|cut -d: -f1,3,7 nobody:65534:/sbin/nologin
[root@CentOS8 ~]ss -nt | tail -n +2 | tr -s ' ' : | cut -d: -f6|sort|uniq -c|sort -nr [root@CentOS8 ~]ss -nt | grep "^ESTAB" | tr -s ' ' : | cut -d: -f6|sort|uniq -c|sort -nr [root@CentOS8 ~]ss -nt | awk -F" +|:" '/^ESTAB/{print $(NF-2)}' |sort|uniq -c | sort -nr
三种常见模式:
命令模式 --> 插入模式
i insert,在光标所在处插入 I 在当前光标所在行的行首输入 a 在光标所在处的后面输入 A 在当前光标所在行的行尾输入 o 在当前光标所在行的下方打开一个新行 O 在当前光标所在行的上方打开一个新行
w 写磁盘文件 wq 写入并退出 q! 不存盘退出 wq! 强制存盘退出 r file 读文件内容到当前文件中 w file 将当前文件内容写入另外一个文件 !command 执行命令 r!command 读入命令的输出
/part1/,/part2/ #从第一次被part1匹配开始,一直到第一次被part2匹配结束 /pattern/ #从当前行向下查找,直到匹配pattern的第一行 % #全文,至关于1,$ $ #最后一行 .,$-1 #当前行到倒数第二行 # #第 # 行 #,# #从左侧#起始行,到右侧#结束行
d #删除 y #复制 w file #指定范围的行另存至指定文件中 r file #在指定位置插入指定文件中的全部内容
格式
s/要查找的内容/替换的内容/修饰符 修饰符: i #忽略大小写 g #全局替换,默认状况下,每一行只替换第一次出现 gc #全局替换,每次替换前询问 要查找的内容: 可以使用基本正则表达式 替换为的内容: 不能使用模式,可是可使用后向引用\1,\2,...等符号,还可使用 "&" 引用前面查找时查到的整个内容
配置文件
/etc/vimrc #全局 ~/.vimrc #我的
经常使用特性:
行号 显示: set number, 简写 set nu 取消显示:set nonumber,简写 set nonu 复制保留格式 启用: set paste 禁用: set nopaste Tab用指定空格个数代替 启用: set tabstop=# 指定#个空格代替Tab 简写: set ts=# 光标所在行标识线 启用: set cursorline,简写 set cul 禁用: set nocursorline
字符间跳转:
h:左 l:右 j:下 k:上
单词间跳转:
w: 下一个单词词首
e: 当前或下一个单词词尾
b: 当前或前一个单词词首
当前页跳转:
H: 页首 M:页中间行 L:页底
zt:将光标所在当前行移到屏幕顶端
zz:将光标所在当前行移到屏幕中间
zb:将光标所在当前行移到屏幕底端
行首行尾跳转:
^ 第一个非空白字符
0 行首
$ 行尾
行间移动:
#G或 :# 跳转到#行
G 最后一行
1G,gg 第一行
句间移动:
)下一句 ( 上一句
翻屏操做:
Ctrl+f 向文件尾部翻一屏 Ctrl+b 向文件首部翻一屏
Ctrl+d 向文件尾部翻半屏 Ctrl+u 向文件首部翻半屏
删除命令:
d 删除,结合光标跳转能够实现范围删除
d$ 删除到行尾
d^ 删除到非空行首
dd 剪切光标所在行
#dd 多行删除
D:从当前光标位置一直删除到行尾,至关于d$
复制命令:
y$ 复制
y0 复制到行尾
y^ 复制到非空行首
yy 复制行
#yy 复制多行
Y: 复制整行
查找:
/pattern: 从当前光标所在处向文件尾部查找
?pattern: 从当前光标所在处向文件首部查找
n: 与命令同方向
N: 与命令反方向
撤销更改:
u 撤销最近的更改
#u 撤销以前屡次更改
U 撤销光标落在这行后全部此行的更改
. 重复前一个操做
#. 重复前一个操做#次
shell脚本:包含一些命令或声明,并符号必定格式的文本文件
格式要求: 首行shebang机制
#!/bin/bash #!/usr/bin/python #!/usr/bin/perl
[root@CentOS8 script]#bash disk.sh 17 [root@CentOS8 script]#cat disk.sh #!/bin/bash df -h| awk -F" +|%" '/\/dev\/sd/{print $5}'|sort -nr|head -n1
[root@CentOS8 script]#cat system_info.sh #!/bin/bash RED="\E[1;31m" GREEN="echo -e \E[1;32m" END="\E[0m" $GREEN-------------------Host systeminfo--------------------$END echo -e "HOSTNAME: $RED`hostname`$END" echo -e "IPADDR: $RED`ifconfig ens33|grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' |head -n1`$END" echo -e "OSVERSION: $RED`cat /etc/redhat-release`$END" echo -e "KERNEL: $RED`uname -r`$END" echo -e "CPU: $RED`lscpu|grep 'Model name'|tr -s ' '|cut -d: -f2`$END" echo -e "MEMORY: $RED`free -h|grep Mem|tr -s ' ' :|cut -d: -f2`$END" echo -e "DISK: $RED`lsblk|awk '/^sd/{print $1,$4}'`$END" $GREEN------------------------------------------------------$END [root@CentOS8 script]#