设为首页 收藏本站
查看: 1338|回复: 0

Linux的shell脚本grep、sed、awk练习和diff、patch、cut、sort介绍

[复制链接]

尚未签到

发表于 2018-8-26 10:39:28 | 显示全部楼层 |阅读模式
  一.grep文本过滤器
  1.格式grep [options][filname]
  2.常用参数选项:
  i 不区分大 小写(只适用于单字符)
  E可用扩展正则表达式 egrep
  F固定字符串匹配fgrep
  A显示匹配行的后多少行
  B显示匹配行的前多少行
  C显示匹配行的前后各多少行
  n显示匹配行及 行号
  v显示不包含匹配文本的所有行反向选择
  q:   静默模式不向屏幕输出
  注egrep为 grep 的扩充版本, 改良了许多传统 grep 不能或不便的操作. 比方说:
  - grep 之下不支持 ? 与 + 这两种 modifier, 但 egrep 则可.
  - grep 不支持 a|b 或 (abc|xyz) 这类"或一"比对, 但 egrep 则可.
  - grep 在处理 {n,m} 时, 需用 { 与 } 处理, 但 egrep 则不需.
DSC0000.png

  3.grep+基本正则表达式
  基本正则表达式字符匹配:
  .   匹配任意单个字符
  []  匹配指定范围的单个字符
  [^] 取反支持之前讲过global的
  [[:digit:]]所有数字
  [[:lower:]]所有小写字符
  [[:upper:]]所有大写字符
  [[:alpha:]]所有字符
  [[:alnum:]]所有字符加数字
  [[:space:]]所有空格
  基本正则表达式匹配字数:
  *   匹配前面的字符任意次仅表示次数 0次 1次 多次
  \?:匹配前面的字符0次或者一次前面的字符可有可无
  \+:  匹配其前面的字符至少出现一次一次或者多次
DSC0001.png

  基本正则表达式位置绑定
  ^:行首绑定:出现于模式的最左侧
  $:行尾绑定:出现于模式的最右侧
  \< :词首绑定,用于单词模式的左侧
  \>:词尾绑定,用于单词模式的右侧
  
  精确匹配
  \{m\}精确匹配字符m次
  \{m,n\}:匹配前面的字符至少m次至多n次
DSC0002.png

DSC0003.png

  
  基本正则表达分组:
  \(\):将一个或者多个字符绑定在一起当做一个整体进行处理
  二.sed文本编辑工具
  1.Sed命令格式   sed [options] 'command' file(s)
  sed [options] -f scriptfile file(s)
  2.sed常用命令参数选项
  -n :不输出模式中的内容到屏幕
  -e 多点编辑
  -f :-f/path/to/script_file 从指定文件中读取编辑脚本
  -r:支持使用扩展正则表达式-i:在原文件处操作
DSC0004.png

DSC0005.png

  3.sed编辑命令
  d:删除
  p:显示  模式空间中的内容
  a\text在行后面追加文本支持使用\n实现多行追加
  i\text在行前面追加文本支持使用\n实现多行插入
  c\text换行为单行或多行文本
  w/path/to/somefile:保存模式空间中匹配到的行至指定文件中
  r/path/from/somefile:读取指定文件的文本流至模式空间中匹配到的行后
  =为模式空间中的行打印行号
  取反条件用在编辑命令后面
  s/pattern/string/修饰符查找并替换
  g:全局替换
  i:查找时忽略大小写
  s@@@ s### (不仅仅限于/)
  删除结尾:
DSC0006.png

  删除空格:
DSC0007.png

  删除1到4行
DSC0008.png

  追加字符
DSC0009.png

  找出UUID开头保存到test
DSC00010.png

  将issue文件加到第六行
DSC00011.png

  执行脚本
DSC00012.png

  将开头#变为/
DSC00013.png

  空行
DSC00014.png

  删除多余的空格
DSC00015.png

  加序号
DSC00016.png

  三.awk文本报告生成器
  1.awk命令格式解析
  格式1前置命令 | awk [选项] ‘[条件]{编辑命令}’
  格式2awk [选项] ‘[条件]{编辑命令}’文件…编辑命令:多条语句可以用分号分隔 print是最常用的指令
DSC00017.png

  2.awk常用命令
  -F指定分隔符可省略默认空格或者tab键
  -f:调用awk脚本进行处理
  -v:调用外部shell变量
DSC00018.png

  选项-F指定输入分隔符默认为空白$0:整行显示 $1,$2..位置参数
  awk过滤处理也支持以指定的字符串作为分隔
  awk -F "in" '{print $1, $3}' /etc/passwd
  awk还识别多种单个的字符串
  awk -F [:/] '{print $1, $10}' /etc/passwd
  3.awk的内置变量有特殊含义可直接使用使用
DSC00019.png

  NR:awk命令所处理的记录数所处理的文件的所有行
  FNR:相对于当前读取的文件来说所处理的记录数行数
  NF相对于当前读取的文件来说所处理的字符数
DSC00020.png

DSC00021.png

  4.awk处理机制
  行前处理BEGIN{}
  逐行处理,{}
  行后处理END{}
  上述编辑指令段可以包含在一对单引号内
  awk [选项] ‘BEGIN{编辑命令}{编辑命令}END{编辑命令}’文件
DSC00022.png

  5.awk阶段小练习
  (1)利用awk提取本机的IP地址
  基本思路提取IP地址结合grep获得包含IP地址的那一行再结合awk
DSC00023.png

  
  (2)利用awk提取本机的根分区使用率
  基本思路通过df命令查看根分区的使用情况输出上述结果中所需要的内容
DSC00024.png

  6.awk条件示例
  正则表达式
  - /正则表达式/
  - ~匹配 ~不匹配
DSC00025.png

  数值/字符串比较
  - == 等于 =不等于
  - > 大于   >=大于或的等于
  - < 小于   file1
  echo `hostname`>file2
  echo 123 >>file2
  diff –c file1 file2
  diff  -r file1 file2
  diff  -u file1 file2
  六.Pacth命令
  用于文件不同文件打布丁
  patch [options] file.old file.path
  1.Patch命令常用参数
  -b或者-backup 备份每一个原始文件
  -c或者-context 把修补数据解译成关联性的差异
  -p 指定目录级别从路径全称重除去基层目录
  -p 0 使用完整路径名 –p1 除去前导斜杠 –p 4除去前导斜杠和前三个目录
  -d 设置工作目录
  -E 若修补过后输出的文件内容是一片空白则移除该文件
  2.补丁的产生和使用
  创建两个有差异的文件 westos1 westos2
  生成补丁  diff –u westos1 westos > westos3.path
  查看生成的补丁 diff –c  /diff –u /diff –r /diff -q
  用补丁恢复westos1(并保留原始westos1文件)
  patch –b westos1 westos3.path
  七.cut命令
  cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出
  cut  [-bn] [file] 或 cut [-c] [file]  或  cut [-df] [file]
  如果不指定 File 参数cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一
  1.cut命常用参数
  -b 以字节为单位进行分割。这些字节位置将忽略多字节字符边界除非也指定了
  -n 标志。(字节bytes)
  -c 以字符为单位进行分割。(字符characters)
  -d 自定义分隔符默认为制表符。
  -f 与-d一起使用指定显示哪个区域。(域fields)
  为什么会有“域”的提取呢因为b和-c只能在固定格式的文档中提取信息而对于非固定格式的信息则束手无策。这时候“域”就派上用场了
DSC00026.png

  2.cut命令操作示例
  filename|cut -b 3           //提取每一行的第三个字节
  filename|cut -b 3-5,8    //提取第三第四第八个字节
  有一点要注意cut命令如果使用了-b选项那么执行此命令时cut会先把-b后面所有的定位进行从小到大排序然后再提取。可不能颠倒定位的顺序哦
  filename|cut -b 8,3-5
  filename|cut -b -3      //表示从第一个字节到第三个字节
  filename|cut -b 3-      //表示从第三个字节到行尾        两种都包含第三个字节
  filename|cut -c 3-5,8      //-c 和-b 在此时得到的结果一样的但换成中文就不一样了试一试吧~cat /etc/passwd|head -n 5|cut -d : -f 1
  cat /etc/passwd|head -n 5|cut -d : -f 1,3-5
  cat /etc/passwd|head -n 5|cut -d : -f 1,3-5,7
  cat /etc/passwd|head -n 5|cut -d : -f -2
DSC00027.png

  
  八.sort命令
  sort 命令对 File 参数指定的文件中的行排序并将结果写到标准输出。如果 File 参数指定多个文件那么 sort 命令将这些文件连接起来并当作一个文件进行排序
  sort [-fbMnrtuk] [file or stdin]
  1.sort命令常用参数
  -f 忽略大小写的差异
  -b 忽略最前面的空格符部分
  -M 以月份的名字来排序例如 JAN, DEC 等等的排序方法
  -n 使用『纯数字』进行排序(默认是以文字型态来排序的)
  -r 反向排序
  -u 就是 uniq 相同的数据中仅出现一行代表
  -t 分隔符默认是用 [tab] 键来分隔
  -k 以那个区间 (field) 来进行排序的意思
  2.sort命令操作示例
  cat /etc/passwd | sort            //对/etc/passwd 的账号进行排序
  sort 是默认以第一个数据来排序而且默认是以字符串形式来排序
  cat /etc/passwd | sort -t ':' -k 3   //以 : 来分隔的以第三栏来排序
  cat /etc/passwd | sort -t ':' -k 3n  //默认是以字符串来排序的如果想要使用数字排序
  cat /etc/passwd | sort -t ':' -k 3nr  //默认是升序排序如果要倒序排序
  按首字母排序
DSC00028.png

  按第三列数字排序,数字排序要加n
DSC00029.png

  去除重复排序
DSC00030.png

  排序导入文件
DSC00031.png

  九.uniq命令
  uniq命令可以去除排序过的文件中的重复行因此uniq经常和sort合用。也就是说为了使uniq起作用所有的重复行必须是相邻的
  uniq [-icu]
  1.uniq命令常用参数
  -i 忽略大小写字符的不同
  -c 进行计数
  -u 只显示唯一的行
  2.uniq命令操作示例
  cat testfile     hello world friend hello world hello
  uniq testfile     直接删除未经排序的文件将会发现没有任何行被删除
  sort testfile | uniq –c     排序之后删除了重复行同时在行首位置输出该行重复的次数
  sort testfile | uniq –dc   仅显示存在重复的行并在行首显示该行重复的次数
  sort testfile | uniq –u     仅显示不重复的行
DSC00032.png

  3.练习:统计指定文件中的词各有多少个的脚本
DSC00033.png

  
  十.echo命令
  linux的echo命令, 在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的, echo命令的功能是在显示器上显示一段文字一般起到一个提示的作用
  echo [ -n ] 字符串
  在Linux中echo命令用来在标准输出上显示一段字符比如echo “welcome to westos!"
  这个就会输出“welcome to westos!”这一行文字
  echo “welcome to westos!”>a.sh这个就会在a.sh文件中输出“welcome to westos!”这一行文字
  1.echo命令常用参数
  -n 不要在最后自动换行
  -e 打开反斜杠ESC转义
  若字符串中出现以下字符则特别加以处理而不会将它当成一般文字输出
  \a 发出警告声
  \b 删除前一个字符
  \c 最后不加上换行符号
  \f 换行但光标仍旧停留在原来的位置
  \n 换行且光标移至行首
  \r 光标移至行首但不换行
  \t 插入tab
  \v 与\f相同
  \\ 插入\字符
  \nnn 插入nnn八进制所代表的ASCII字符
  2.echo输出颜色文本
  shell脚本中echo显示内容带颜色显示,echo显示带颜色需要使用参数-e格式如下echo -e "\033[41;36m something here \033[0m" 其中41的位置代表底色 36的位置是代表字的颜色 注意   
  1、字背景颜色和文字颜色之间是英文的""   
  2、文字颜色后面有个m   
  3、字符串前后可以没有空格如果有的话输出也是同样有空格   
  下面是相应的字和背景颜色可以自己来尝试找出不同颜色搭配
  例子   
  echo -e “\033[31m 红色字 \033[0m”
  echo -e “\033[34m 黄色字 \033[0m”
  echo -e “\033[41;33m 红底黄字 \033[0m”
  echo -e “\033[41;37m 红底白字 \033[0m”
  字颜色30—–37
  echo -e “\033[30m 黑色字 \033[0m”   
  echo -e “\033[31m 红色字 \033[0m”   
  echo -e “\033[32m 绿色字 \033[0m”   
  echo -e “\033[33m 黄色字 \033[0m”   
  echo -e “\033[34m 蓝色字 \033[0m”   
  echo -e “\033[35m 紫色字 \033[0m”   
  echo -e “\033[36m 天蓝字 \033[0m”   
  echo -e “\033[37m 白色字 \033[0m”
  字背景颜色范围40—–47
  echo -e “\033[40;37m 黑底白字 \033[0m”   
  echo -e “\033[41;37m 红底白字 \033[0m”   
  echo -e “\033[42;37m 绿底白字 \033[0m”   
  echo -e “\033[43;37m 黄底白字 \033[0m”   
  echo -e “\033[44;37m 蓝底白字 \033[0m”   
  echo -e “\033[45;37m 紫底白字 \033[0m”   
  echo -e “\033[46;37m 天蓝底白字 \033[0m”   
  echo -e “\033[47;30m 白底黑字 \033[0m”
  最后面控制选项说明
  \33[0m 关闭所有属性   
  \33[1m 设置高亮度   
  \33[4m 下划线   
  \33[5m 闪烁   
  \33[7m 反显   
  \33[8m 消隐   
  \33[30m — \33[37m 设置前景色   
  \33[40m — \33[47m 设置背景色
  最后面控制选项说明  
  \33[nA 光标上移n行  
  \33[nB 光标下移n行   
  \33[nC 光标右移n行   
  \33[nD 光标左移n行   
  \33[y;xH设置光标位置   
  \33[2J 清屏   
  \33[K 清除从光标到行尾的内容   
  \33[s 保存光标位置   
  \33[u 恢复光标位置   
  \33[?25l 隐藏光标   
  \33[?25h 显示光标


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-556727-1-1.html 上篇帖子: shell介绍、命令历史、补全和别名、通配符、重定向 下篇帖子: centos7--shell脚本自动实现bond配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表