一、正则表达式1、特殊符号引号单引号内容原封不动的输出双引号会解析一些特殊符号但对于{}通配符没有解析不加引号和双引号类似额外支持通配符 *.log {1…10}反引号优先执行反引号内的命令重定向标准正确输出先清空后写入追加2标准错误输出21 xxx.logecho xkm xkm.log 21echo xkm xkm.log标准输入cat xxx.txt EOFxxxxEOF通配符用于批量处理文件*所有{}输出序列[]?任意一个字符2、正则表达式配合三剑客使用正则对字符进行过滤正则表达式在线测试基础正则^xxx以xxx开头xxx$以xxx结尾 cat -A 显示文件中隐藏的特殊符号^$空行.任意一个字符\转义字符 ‘\.$’ 以.结尾x*前一个字符连续出现0次或0次以上.*所有[]匹配任意一个字符 [abc] a或者b或者c不需要转义与搭配较多[^]取反 [^abc] 匹配任意一个字母除了abc扩展正则egrep 或 grep -Esed -rawk默认支持前一个字符连续出现1次或1次以上[0-9] 取出所有的数字[a-Z] 取出所有的单词|或者()表示一个整体或在sed中实现后向引用反向引用sed{}a{n,m} 前一个字符连续出现至少n次最多m次a{n} 前一个字符连续出现n次a{n,} 前一个字符连续出现至少n次a{,m}前一个字符连续出现最多m次前一个字符出现0次或1次perl正则grep -P\d[0-9]\s匹配的空字符 空格 tab \ \t \r \n \f\w[0-9a-zA-Z_]\D[^0-9]\s非空字符\W[^0-9a-zA-Z_]二、gerp擅长过滤过滤速度最快会把匹配到的行显示出来选项说明-n显示行号-i不区分大小写-v排除# 显示/etc/下面一层中以.conf结尾的文件ls/etc/|grep\.conf$find/etc/-maxdepth1-typef-name*.conf# 使用grep取出/etc/passwd第一列的数据egrep-o^[^:]/etc/passwd三、sed擅长取行过滤增删查改替换修改文件内容后向引用截取-n取消默认输出有p输出时要加上-n不然会全部输出-r支持扩展正则-i修改文件内容这个选项要放在最后-i.bak先进行备份然后修改文件内容这个选项要放在最后1、查找精确查找 类似于grep的过滤但是可以指定行号模糊查找# 取出文件的第三行sed-n3p/etc/passwd# 取出文件的第2到5行sed-n2,5p/etc/passwd# 取出文件的第2行和第5行sed-n2p;5p/etc/passwd# 取出文件的最后一行sed-n$p/etc/passwd# 过滤出包含root的行sed-n/root/p/etc/passwd# 获取范围内的日志sed-n/11:00:00/,/24:00:00/p/var/text.log2、替换格式 sed ‘s#找谁#替换成什么#g’ 文件名 输出文件内容sed -i ‘s#找谁#替换成什么#g’ 文件名 修改文件内容ssubstitute 替换gglobal 全局替换把一行中所有匹配到的内容都进行替换否则只替换每一行第1个匹配到的内容3、替换进阶-后向引用适用于sed命令处理/提取一行中的某一部分配合正则灵活取列# \数字 调用前面的组echo1234567|sed-rs#(1)(.*)(7)#\1\2\3#g1234567# 调换/etc/passwd第一列和最后一列的内容sed-rs#(^.*)(:x.*:)(.*$)#\3\2\1#g/etc/passwdsed-rs#([a-zA-Z0-9_-])(.*:)(.*$)#\3\2\1#g/etc/passwd# 提取网卡ipipa s eth0|sed-nr3 s#(^[a-z] )(.*)(/.*)#\2#g p4、删除d 删除以行为单位sed ‘3d’ xkm.log删除空行或带#的行sed -r ‘/^$|#/d’ xkm.log5、增加caia:append 在指定行后面追加内容i:insert 在指定行上面插入一行c:replace 替换指定行的内容取代sed ‘3a xxx’ xkm.log四、awk是一个单行脚本取行、取列、混合取行与列、统计功能、判断与循环、数组擅长取列‘条件{动作}’1、取行# 取出第一行awkNR1{print $0}/etc/passwdawkNR1/etc/passwd# NR Number of Record 记录号行号# 取出第2到5行awkNR2 NR5/etc/passwd# 过滤出包含root或nobody的行awk/root|nobody//etc/passwd# 过滤出包含从root到nobody的行awk/root/,/nobody//etc/passwd2、取列$数字 表示取列$1第一列$0表示这一行$NF 最后一列 Number of Field$(NF-1) 倒数第二列column -t 对齐-F 指定分隔符 -F:$4 ~ /^[01]/ 第4列包含0或1开头 ~ 对某列进行过滤# 取出ls -lh的size列和最后一列ls-lh|awk{print $5,$NF}# 指定复杂分隔符取ipipa s eth0|awk-F[ /]NR3{print $3}# 判断第三列大于1000取出第一列第三列和最后一列awk-F:$31000{print $1,$3,$NF}/etc/passwd# 过滤出/etc/passwd第4列的数字是以0或1开头的行输出第一列第三列awk-F:$4 ~ /^[01]/ {print $1,$3}/etc/passwd3、统计与计算类似wc -lawk{i} END{print i}/etc/passwd进行累加求和awk{ii$1} END{print i}/etc/passwd五、find擅长在指定目录中查找文件选项说明-type什么类型的文件 f表示文件 d表示目录-name要查找的文件的名称-size根据大小查找文件 表示大于 -表示小于-mtime根据修改时间查找文件 或 - 表示在指定天数内或后-user根据所属用户-maxdepth指定深度写在最前面# 对查找到的每个文件执行指定的命令find/var/log/app-name*.log-matime7-execrm-f{}\;# 将查找到的所有文件作为参数传递给指定的命令而不是逐个执行find/var/log/app-name*.log-matime-7-exectarzcf /var/log/app.tar.gz{}
linux基础随心记三-四剑客
一、正则表达式1、特殊符号引号单引号内容原封不动的输出双引号会解析一些特殊符号但对于{}通配符没有解析不加引号和双引号类似额外支持通配符 *.log {1…10}反引号优先执行反引号内的命令重定向标准正确输出先清空后写入追加2标准错误输出21 xxx.logecho xkm xkm.log 21echo xkm xkm.log标准输入cat xxx.txt EOFxxxxEOF通配符用于批量处理文件*所有{}输出序列[]?任意一个字符2、正则表达式配合三剑客使用正则对字符进行过滤正则表达式在线测试基础正则^xxx以xxx开头xxx$以xxx结尾 cat -A 显示文件中隐藏的特殊符号^$空行.任意一个字符\转义字符 ‘\.$’ 以.结尾x*前一个字符连续出现0次或0次以上.*所有[]匹配任意一个字符 [abc] a或者b或者c不需要转义与搭配较多[^]取反 [^abc] 匹配任意一个字母除了abc扩展正则egrep 或 grep -Esed -rawk默认支持前一个字符连续出现1次或1次以上[0-9] 取出所有的数字[a-Z] 取出所有的单词|或者()表示一个整体或在sed中实现后向引用反向引用sed{}a{n,m} 前一个字符连续出现至少n次最多m次a{n} 前一个字符连续出现n次a{n,} 前一个字符连续出现至少n次a{,m}前一个字符连续出现最多m次前一个字符出现0次或1次perl正则grep -P\d[0-9]\s匹配的空字符 空格 tab \ \t \r \n \f\w[0-9a-zA-Z_]\D[^0-9]\s非空字符\W[^0-9a-zA-Z_]二、gerp擅长过滤过滤速度最快会把匹配到的行显示出来选项说明-n显示行号-i不区分大小写-v排除# 显示/etc/下面一层中以.conf结尾的文件ls/etc/|grep\.conf$find/etc/-maxdepth1-typef-name*.conf# 使用grep取出/etc/passwd第一列的数据egrep-o^[^:]/etc/passwd三、sed擅长取行过滤增删查改替换修改文件内容后向引用截取-n取消默认输出有p输出时要加上-n不然会全部输出-r支持扩展正则-i修改文件内容这个选项要放在最后-i.bak先进行备份然后修改文件内容这个选项要放在最后1、查找精确查找 类似于grep的过滤但是可以指定行号模糊查找# 取出文件的第三行sed-n3p/etc/passwd# 取出文件的第2到5行sed-n2,5p/etc/passwd# 取出文件的第2行和第5行sed-n2p;5p/etc/passwd# 取出文件的最后一行sed-n$p/etc/passwd# 过滤出包含root的行sed-n/root/p/etc/passwd# 获取范围内的日志sed-n/11:00:00/,/24:00:00/p/var/text.log2、替换格式 sed ‘s#找谁#替换成什么#g’ 文件名 输出文件内容sed -i ‘s#找谁#替换成什么#g’ 文件名 修改文件内容ssubstitute 替换gglobal 全局替换把一行中所有匹配到的内容都进行替换否则只替换每一行第1个匹配到的内容3、替换进阶-后向引用适用于sed命令处理/提取一行中的某一部分配合正则灵活取列# \数字 调用前面的组echo1234567|sed-rs#(1)(.*)(7)#\1\2\3#g1234567# 调换/etc/passwd第一列和最后一列的内容sed-rs#(^.*)(:x.*:)(.*$)#\3\2\1#g/etc/passwdsed-rs#([a-zA-Z0-9_-])(.*:)(.*$)#\3\2\1#g/etc/passwd# 提取网卡ipipa s eth0|sed-nr3 s#(^[a-z] )(.*)(/.*)#\2#g p4、删除d 删除以行为单位sed ‘3d’ xkm.log删除空行或带#的行sed -r ‘/^$|#/d’ xkm.log5、增加caia:append 在指定行后面追加内容i:insert 在指定行上面插入一行c:replace 替换指定行的内容取代sed ‘3a xxx’ xkm.log四、awk是一个单行脚本取行、取列、混合取行与列、统计功能、判断与循环、数组擅长取列‘条件{动作}’1、取行# 取出第一行awkNR1{print $0}/etc/passwdawkNR1/etc/passwd# NR Number of Record 记录号行号# 取出第2到5行awkNR2 NR5/etc/passwd# 过滤出包含root或nobody的行awk/root|nobody//etc/passwd# 过滤出包含从root到nobody的行awk/root/,/nobody//etc/passwd2、取列$数字 表示取列$1第一列$0表示这一行$NF 最后一列 Number of Field$(NF-1) 倒数第二列column -t 对齐-F 指定分隔符 -F:$4 ~ /^[01]/ 第4列包含0或1开头 ~ 对某列进行过滤# 取出ls -lh的size列和最后一列ls-lh|awk{print $5,$NF}# 指定复杂分隔符取ipipa s eth0|awk-F[ /]NR3{print $3}# 判断第三列大于1000取出第一列第三列和最后一列awk-F:$31000{print $1,$3,$NF}/etc/passwd# 过滤出/etc/passwd第4列的数字是以0或1开头的行输出第一列第三列awk-F:$4 ~ /^[01]/ {print $1,$3}/etc/passwd3、统计与计算类似wc -lawk{i} END{print i}/etc/passwd进行累加求和awk{ii$1} END{print i}/etc/passwd五、find擅长在指定目录中查找文件选项说明-type什么类型的文件 f表示文件 d表示目录-name要查找的文件的名称-size根据大小查找文件 表示大于 -表示小于-mtime根据修改时间查找文件 或 - 表示在指定天数内或后-user根据所属用户-maxdepth指定深度写在最前面# 对查找到的每个文件执行指定的命令find/var/log/app-name*.log-matime7-execrm-f{}\;# 将查找到的所有文件作为参数传递给指定的命令而不是逐个执行find/var/log/app-name*.log-matime-7-exectarzcf /var/log/app.tar.gz{}