ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

之前学linux四大神器grep sed cut awk的部分笔记

2022-01-23 13:34:47  阅读:222  来源: 互联网

标签:cut grep passwd NF echo sed awk print root


一、expect实现无交互登录:
1.例1:免密码登录ssh服务器(不是用秘钥)
2.服务器批量管理。

二、正则表达式
1.四大神器:grep sed cut awk

2.linux常用两种正则表达式引擎:
(1)基础正则表达式:BRE
(2)扩展正则表达式:ERE

(1)grep 文本过滤。
(2)sed流编辑器,实现编辑
(3)awk文本报告器,实现格式化文本输出。

4…grep强大检索

三、sed流编辑器

四、shell中色彩处理和awk使用技巧。
1.shell颜色处理。
(1)格式1:echo -e “\033[背景颜色;文字颜色m要输出的字符\033[0m”
(2)格式2:echo -e “\e[背景颜色;文字颜色m要输出的字符\e[0m”
(3)例:绿底蓝字 echo -e “\033[42;34m hello color \033[0m” (这个灵活使用,用的时候查)
(4)解释:
\033[0m 关闭所有属性
\033[1m 设置高亮度,加粗
\033[5m 闪烁(执行后后续一直是闪烁状态)
(5)30黑字 31红字 32绿字 33黄字 34蓝字 35紫字 36蓝绿色 37白字
(6)3x是字颜色,4x是背景颜色。(对应着看)

五、神器awk(只要你水平达到用awk无所不能)(awk可以和shell一样去编程)
1.awk—>gawk 即:gun awk(功能最强大的数据处理引擎之一)
2.模式扫描和处理语言,一个awk脚本可以有多个语句。模式决定动作语句的触发条件和触发时间。
3.模式:
(1)正则表达式:/root/ 匹配含有root的行 /*.root/
(2)关系表达式:< > && || + *
(3)匹配表达式:~ !~

4.动作:
变量 命令 内置函数 流控制语句

5.语法结构如下:
(1)awk [options] 'BEGIN{print ‘start’} ‘pattern{commands}’ END{print ‘end’}'file
(2)其中:BEGIN END是AWK的关键字部,因此必须大写;这两部分开始块和结束块是可选的。
(3)开始模块 工作模块 结束模块

6.awk最好学习方法就是记具体的案例。

7.awk工作三个步骤:
(1)读:从文件、管道或标准输出读入一行然后把他放到内存中。
(2)执行:对每一行数据,根据awk命令按顺序执行。默认情况是处理每一行数据,也可指定模式。
(3)重复:一直重复上述两个过程直到文件结束。

8.awk两种不同类型变量:内建变量,自定义变量。

9.awk内置变量(预定义变量):(这个要死记)()
(1)$0当前行
(2)NF 字段数量 number field
(3)NR 行号,多文件递增 number record (FNR多文件时独立计数)
(4)\t 制表符
(5)\n 换行符
(6)~ 匹配
(7)!~ 不匹配
(8)-F’[:#/]'定义三个分隔符

10.参数:
(1)-F 分隔符,默认是空格。
(2)-f 调用脚本,加的是awk脚本
(3)NF代表最后一列
(4)$1 $2…
(5)-v 定义变量
(6)’{}'引用变量
(7){…}命令代码块,包含一条或多条命令
(8)BEGIN 初始化代码块
(9)/str/ 匹配代码块,可以是字符串或正则表达式
(10){print A;print B} 多条命令使用分号间隔
(11)END 结尾代码块
(12)NR 行号
(13)格式:awk [-F|-f|-v] 'BEGIN{}//{command1;command2} END{}'file

11.实际演示

基础演练:
(1)执行模块用单引号,-F用双引号。 注:外面用单引号,里面全部用双引号,防止匹配对匹配不上。
(2)echo AA BB CC DD | awk ‘{print $2}’
(3)echo “AA,BB,CC,DD” | awk -F “,” ‘{print $2}’
(4)awk -F: ‘{print $1}’ /etc/passwd
(5)echo “12AxAbADXaAD52” | awk -F “aA” ‘{print $2}’
(6)echo “12AxAbADXaAD52” | awk ‘BEGIN {FS=“aA”} {print $2}’
(7)过滤本系统的IP地址:
ifconfig eth0 | grep netmask | awk ‘{print $2}’

运算符篇:
(1)echo “3 2 3 4 5” > a.txt awk ‘{print $1+10}’ a.txt
(2)如果a.txt文件是多行,那么将同时操控多行。
(3)echo “1 2 3 4” | awk ‘{print $NF}’ 输出最后一列
(4)echo “1 2 3 4” | awk '{print $(NF-2)}'输出倒数第三列
(5)echo “1 2 3 4” | awk ‘{print $(NF/2-1)}’
(6)打印passwd文件中用户UID小于10的用户名和他登录使用的shell:
awk -F: ‘$3<10{print $1 $NF}’ /etc/passwd #格式太乱
awk -F: ‘$3<10{print $1 “<—>” $NF}’ /etc/passwd #格式化输出
awk -F: ‘$3<10{print $1 “\t” $NF}’ /etc/passwd #间隔一个tab
awk -F: ‘$3<10{print 1 , 1, 1,NF}’ /etc/passwd #间隔逗号,不用分号括住了。
(7)打印系统中UID大于1000且登录shell是/bin/bash的用户:
awk -F: ‘$3>=1000 && $NF=="/bin/bash"{print KaTeX parse error: Undefined control sequence: \t at position 4: 1 "\̲t̲"NF}’ /etc/passwd

添加开始和结束模块:
(1)开始:(也可以写一行)
BEGIN{
print “UserId\t\t\tShell”
print “-----------------”
FS=":"
}
$3>=500 && $NF=="/bin/bash"{
printf “%-20s %-20s\n”, 1 , 1, 1,NF
}
END{
print “-------”
}

注:
左对齐: “-” “%-20s” ; 右对齐: “+” “%+20s”

(2)在脚本中的一些应用:
例:统计当前内存的使用率
free -m | grep Mem | awk ‘{print $3/$2*100"%"}’

12.awk高级应用

基础知识:
(1)模式:
empty空模式,这个是常用的
/regular expression/ 仅处理被这个模式匹配到的行
(2)匹配模式例子1:awk -F: ‘/^root/{print $1}’ /etc/passwd
(3)匹配模式例子2:awk -F: ‘/^root/{print $0}’ /etc/passwd $0是打印整行
(4)行范围匹配 startline,endline.
awk -F: ‘(NR>=3&&NR<=6){print NR,$0}’ /etc/passwd
(5)打印ip地址(行号定位):ifconfig eth0 | awk -F ‘NR==2{print $2}’
(6)NR和FNR的区别。
(7)route -n 过滤第一行。
法一: route -n | grep -V ^Kernel
法二: route -n | sed 1d
法三: route -n | awk ‘NR!=1 {print $0}’
(8)匹配,用awk查出包括root字符的行,不包括root的行,以bash结尾的行
awk -F: ‘/root/{print $0}’ /etc/passwd
awk -F: ‘!/root/{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 0}̲' /etc/passwd …/{print $0}’ /etc/passwd

条件表达式篇:
(1)UID>10,变量赋bbb;UID<10,变量赋aaa
awk -F: ‘{$3<10? USER=“aaa”:USER=“bbb”;print $1,USER}’ /etc/passwd
(2)同(1),另一种表达法
awk -F: ‘{if($3<10){print “user=>”$1}else{print “pass=>”$1}}’
(3)查出行号小于等于5且包括/bin/bash的行:
awk -F: ‘{if($3<=5 && NF ~ “/bin/bash”){print 1 , 1, 1,NF}}’ /etc/passwd

变量篇:
(1)var=value
awk ‘BEGIN{"KaTeX parse error: Expected 'EOF', got '}' at position 5: var"}̲' awk 'BEGIN{pr…var’"}’ #引用变量时,使用单引号+双引号括起来。

格式化输出篇:
(1)
(2)
(3)

13.实战-shell脚本实战
(1)检查服务器是否受到ddos攻击脚本:
(2)思路:通过netstat查看网络连接数。如果一个IP地址对服务器建立很多连接数(比如1分钟100个连接),认为发生了ddos。
(3)命令:netstat -ntu | awk ‘{print $5}’ | cut -d: -f4 | sort | uniq -c | sort -n
(4)解析: 截取外网IP和端口 | 截取外网的IP以:为分隔符 | 排序 | 排除相同选项的记录 | 排序并统计
(5)模拟DDOS:
ab命令:做压力测试的工具和性能的监控工具
语法:ab -n 要产生的链接数总和 -c同时打开的客户端数量 http://链接
安装:一般安装apache会默认带上
ab -n 1000 -c 10 模拟10台客户端,1000个链接访问。

linux一辈子都研究不完
我们不能一直在一块绕,我们要一直向前,然后遇到以前的在再回顾并加深。

标签:cut,grep,passwd,NF,echo,sed,awk,print,root
来源: https://blog.csdn.net/qq_44821149/article/details/122650289

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有