【BASH】回顾与知识点梳理(十一)

【BASH】回顾与知识点梳理 十一

    • 十一. 八至十章知识点总结及练习
      • 11.1 总结
      • 11.2 练习
        • 情境模拟题一:透过 grep 搜寻特殊字符串,并配合数据流重导向来处理大量的文件搜寻问题。
        • 情境模拟题二:使用管线命令配合正规表示法建立新指令与新变量。

该系列目录 --> 【BASH】回顾与知识点梳理(目录)

十一. 八至十章知识点总结及练习

11.1 总结

  • 正规表示法就是处理字符串的方法,他是以为单位来进行字符串的处理行为;
  • 正规表示法透过一些特殊符号的辅助,可以让使用者轻易的达到『搜寻/删除/取代』某特定字符串的处理程
    序;(grep,sed nd,sed nc string)
  • 只要工具程序支持正规表示法,那么该工具程序就可以用来作为正规表示法的字符串处理之用;(grep sed)
  • 正规表示法与通配符是完全不一样的东西!通配符 (wildcard) 代表的是 bash 操作接口的一个功能, 但正规表示法则是一种字符串处理的表示方式!
  • 使用 grep 或其他工具进行正规表示法的字符串比对时,因为编码的问题会有不同的状态,因此, 你最好将 LANG 等变量设定为 C 或者是 en 等英文语系!
  • grep 与 egrep 在正规表示法里面是很常见的两支程序,其中, egrep 支持更严谨的正规表示法的语法;grep -e
  • 由于编码系统的不同,不同的语系 (LANG) 会造成正规表示法撷取资料的差异。因此可利用特殊符号如[:upper:] 来替代编码范围较佳;
  • 由于严谨度的不同,正规表示法之上还有更严谨的延伸正规表示法;
  • 基础正规表示法的特殊字符有: *, ., [], [-], [^], ^, $ 等!扩展正则表达式特殊字符有:+, ?, |, (), ()+
  • 常见的支持正规表示法的工具软件有: grep , sed, vim 等等
  • printf 可以透过一些特殊符号来将数据进行格式化输出;(s,i,f \t \n \v)
  • awk 可以使用『字段』为依据,进行数据的重新整理与输出;($1 $2… NF,NL,FS,if-else)
  • 文件的比对中,可利用 diff 及 cmp 进行比对,其中 diff 主要用在纯文本文件方面的新旧版本比对 (diff -Naur)
  • patch 指令可以将旧版数据更新到新版 (主要亦由 diff 建立 patch 的补丁来源文件) (-p0, -R)

11.2 练习

情境模拟题一:透过 grep 搜寻特殊字符串,并配合数据流重导向来处理大量的文件搜寻问题。

  • 目标:正确的使用正规表示法;
  • 前提:需要了解数据流重导向,以及透过子指令 $(command) 来处理档名的搜寻;

我们简单的以搜寻星号 (*) 来处理底下的任务:

  1. 利用正规表示法找出系统中含有某些特殊关键词的文件,举例来说,找出在 /etc 底下含有星号 (*) 的文件与内容

解决的方法必须要搭配通配符,但是星号本身就是正规表示法的字符,因此需要如此进行(名称带*的文件没有,用.代替举例):

[root@node-135 passwd]# grep '\*' /etc/* 2>/dev/null
Binary file /etc/aliases.db matches
/etc/bashrc:    xterm*|vte*)
/etc/bashrc:          PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
/etc/bashrc:    screen*)
/etc/bashrc:          PROMPT_COMMAND='printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
/etc/bashrc:    *)
...

你必须要注意的是,在单引号内的星号是正规表示法的字符,但我们要找的是星号,因此需要加上跳脱字符 (\)。但是在 /etc/* 的那个 * 则是 bash 的通配符! 代表的是文件的档名喔!不过由上述的这个结果中,我们仅能找到 /etc 底下第一层子目录的数据,无法找到次目录的数据, 如果想要连同完整的 /etc 次目录数据,就得要这样做:

grep '\*' $(find /etc -type f ) 2> /dev/null
[root@node-135 passwd]# find /etc -type f|wc -l
1768
# 如果只想列出档名而不要列出内容的话,使用底下的方式来处理即可喔!
[dmtsai@study ~]$ grep -l '\*' $(find /etc -type f ) 2> /dev/null
  1. 但如果文件数量太多呢?如同上述的案例,如果要找的是全系统 (/) 呢?你可以这样做:
grep '\*' $(find / -type f 2> /dev/null )
-bash: /usr/bin/grep: Argument list too long

真要命!由于指令列的内容长度是有限制的,因此当搜寻的对象是整个系统时,上述的指令会发生错误。那该如何是好? 此时我们可以透过管线命令以及 xargs 来处理。举例来说,让 grep 每次仅能处理 10 个档名,此时你可以这样想:

a. 先用 find 去找出文件;
b. 用 xargs 将这些文件每次丢 10 个给 grep 来作为参数处理;
c. grep 实际开始搜寻文件内容。

所以整个作法就会变成这样:

find / -type f 2> /dev/null | xargs -n 10 grep '\*'
  1. 从输出的结果来看,数据量实在非常庞大!那如果我只是想要知道檔名而已呢?你可以透过 grep 的功能来找到如下的参数!
 find / -type f 2> /dev/null | xargs -n 10 grep -l '\*'

情境模拟题二:使用管线命令配合正规表示法建立新指令与新变量。

我想要建立一个新的指令名为 myip ,这个指令能够将我系统的 IP 捉出来显示。而我想要有个新变量,变量名为 MYIP ,这个变量可以记录我的 IP 。

我们可以这样试看看:

  1. 首先,我们依据本章内的 ifconfig, sed 与 awk 来取得我们的 IP ,指令为:
[root@node-135 passwd]# ifconfig |grep 'inet.*netmask'|sed -e  's/^.*inet //g' -e 's/  net.*$//g'
192.168.81.106
192.168.17.135
127.0.0.1
  1. 再来,我们可以将此指令利用 alias 指定为 myip 喔!如下所示:
[root@node-135 passwd]# alias myip="ifconfig |grep 'inet.*netmask'|sed -e  's/^.*inet //g' -e 's/  net.*$//g'"
  1. 最终,我们可以透过变量设定来处理 MYIP 喔!
[root@node-135 passwd]# MYIP=$(myip)
[root@node-135 passwd]# echo $MYIP
192.168.81.106 192.168.17.135 127.0.0.1
  1. 如果每次登入都要生效,可以将 alias 与 MYIP 的设定那两行,写入你的 ~/.bashrc 即可!

简答题部分:

  • 我想要知道,在 /etc 底下,只要含有 XYZ 三个字符的任何一个字符的那一行就列出来,要怎样进行?
[root@node-135 passwd]# grep [XYZ] /etc/* 2>/dev/null|wc -l
687
[root@node-135 passwd]# egrep 'X|Y|Z' /etc/* 2>/dev/null|wc -l
687
  • 将 /etc/kdump.conf 内容取出后,(1)去除开头为 # 的行 (2)去除空白行 (3)取出开头为英文字母的那几行 (4)最终统计总行数该如何进行?
[root@node-135 passwd]# egrep -v '^#|^$' /etc/kdump.conf |grep '^[a-zA-Z]' |wc -l
2
[root@node-135 passwd]# egrep -v '^#|^$' /etc/kdump.conf |egrep '^[a-zA-Z].*' |wc -l
2
[root@node-135 passwd]# grep -v '^#' /etc/kdump.conf | grep -v '^$' | grep '^[[:alpha:]]' | wc -l
2

该系列目录 --> 【BASH】回顾与知识点梳理(目录)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/65822.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LangChain源码逐行解密之LLMs(二)

LangChain源码逐行解密之LLMs(二) 18.3 base.py源码逐行剖析 现在我们要聚焦于源代码中的大语言模型部分。如图18-3所示,LangChain提供了许多语言模型的选择。 Gavin大咖微信:NLP_Matrix_Space 图18- 3 LangChain的llms目录 如图18-4所示,整个LangChain的模块化设计非常出…

JAVA集合框架 一:Collection(LIst,Set)和Iterator(迭代器)

目录 一、Java 集合框架体系 1.Collection接口:用于存储一个一个的数据,也称单列数据集合(single)。 2.Map接口:用于存储具有映射关系“key-value对”的集合(couple) 3.Iterator接口&#…

ME41询价单创建BAPI

关于ME41创建询价单系统并没有准备标准的BAPI,这一点在note:2115337中有说明。 但是通过查阅相关资料找到一个BAPI:BS01_MM_QUOTATION_CREATE,可以为ME41进行创建,但是如果不做一些增强,会有一些额外的错误&#xff0…

Vue 整合 Element UI 、路由嵌套、参数传递、重定向、404和路由钩子(五)

一、整合 Element UI 1.1 工程初始化 使用管理员的模式进入 cmd 的命令行模式,创建一个名为 hello-vue 的工程,命令为: # 1、目录切换 cd F:\idea_home\vue# 2、项目的初始化,记得一路的 no vue init webpack hello-vue 1.2 安装…

【代码】表格封装 + 高级查询 + 搜索 +分页器 (极简)

一、标题 查询条件按钮&#xff08;Header&#xff09; <!-- Header 标题搜索栏 --> <template><div><div class"header"><div class"h-left"><div class"title"><div class"desc-test">…

Flutter系列文章-实战项目

在本篇文章中&#xff0c;我们将通过一个实际的 Flutter 应用来综合运用最近学到的知识&#xff0c;包括保存到数据库、进行 HTTP 请求等。我们将开发一个简单的天气应用&#xff0c;可以根据用户输入的城市名获取该城市的天气信息&#xff0c;并将用户查询的城市列表保存到本地…

语音同声翻译软件到底谁更胜一筹呢

嘿&#xff01;你是否曾经遇到过需要在不同语言之间进行实时翻译的情况&#xff1f;别担心&#xff0c;现在有许多翻译软件可供选择&#xff0c;让你的沟通变得更加简便和愉快。无论你是旅行者、国际商务人士还是语言爱好者&#xff0c;这些软件都将成为你的得力助手&#xff0…

领航优配:暑期旅游市场热度持续攀升,相关公司业绩有望持续释放

到发稿&#xff0c;海看股份涨停&#xff0c;中广天择、探路者、众信旅行等涨幅居前。 8月8日&#xff0c;在线旅行板块震动上涨&#xff0c;到发稿&#xff0c;海看股份涨停&#xff0c;中广天择、探路者、众信旅行等涨幅居前。 今年以来&#xff0c;国内旅行商场逐渐恢复。文…

arcgis--数据库构建网络数据集

1、打开arcmap软件&#xff0c;导入数据&#xff0c;如下&#xff1a; 该数据已经过处理&#xff0c;各交点处均被打断&#xff0c;并进行了拓扑检查。 2、在文件夹下新建文件数据库&#xff0c;名称为路网&#xff0c;在数据库下新建要素类&#xff0c;并导入道路shp文件&…

网络编程的使用

文章目录 基础代码URL类进行传输编码解码 协议TCPUDPhttp PORT端口协议的实现TCPUDP 模拟服务器 基础代码 最后一个是&#xff1a;只要再timeout时间内连接上就是true URL类 导了一个common-iojar包&#xff0c;那个IOUtils就是那个里面的工具类 进行传输编码解码 协议 TC…

应用在室外LED电子显示屏中的MiniLED背光

LED电子显示屏是一种通过控制半导体发光二极管的显示方式&#xff0c;是由几万–几十万个半导体发光二极管像素点均匀排列组成。它利用不同的材料可以制造不同色彩的LED像素点&#xff0c;以显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕。 LED显示屏…

前端进阶html+css04----盒子模型

1.一个盒子由content&#xff08;文本内容)&#xff0c;padding,border,margin组成。 2.盒子的大小指的是盒子的宽度和高度。一般由box-sizing属性来控制。 1&#xff09;默认情况下, 也就是box-sizing: content-box时&#xff0c;盒子的宽高计算公式如下&#xff1a; 盒子宽…

rocketMq消息队列详细使用与实践整合spring

文章目录 一、RocketMQ原生API使用1、测试环境搭建2、RocketMQ的编程模型3、RocketMQ的消息样例3.1 基本样例3.2 顺序消息3.3 广播消息3.4 延迟消息3.5 批量消息3.6 过滤消息3.7 事务消息3.8 ACL权限控制 二、SpringBoot整合RocketMQ1、快速实战2、其他更多消息类型&#xff1a…

axios接受文件流并下载

需求场景 前端发送请求&#xff0c;后端传回文件流&#xff0c;前端接受到后立刻打开下载窗口下载文件 注意事项 请求api需要添加&#xff1a;responseType:blob&#xff0c; axios拦截器拦截错误状态码 (假设是code) 那里的if从res.code ! 200改为res.code && res.…

AI和GPT的崛起,对未来项目管理的影响与变革︱原微软项目经理陆敏

原微软项目经理和产品经理人才顾问陆敏先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;AI和GPT的崛起&#xff0c;对未来项目管理的影响与变革。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1…

Not All Features Matter:Enhancing Few-shot CLIP with Adaptive Prior Refinement

APE是ICCV2023的一篇文章&#xff0c;也是我在这个领域里接触的第一篇文章&#xff0c;这里主要做一下记录。 论文链接&#xff1a;2304.01195.pdf (arxiv.org) 代码链接&#xff1a;yangyangyang127/APE: [ICCV 2023] Code for "Not All Features Matter: Enhancing Fe…

Java多线程(七)

目录 一、线程池参数介绍 二、线程池的工作流程 三、使用Executors创建常见的线程 一、线程池参数介绍 为了深入的了解线程池&#xff0c;这里就需要明白线程中的各种参数的含义。下述的图片中是来自于Java标准库中对线程池描述。 1.corePoolSize 与 maximumPoolSize 其中core…

pytorch模型转化为tensorflow模型

前言 目前大多数模型都是pytorch格式&#xff0c;部署上很多tfserving用的比较多&#xff0c;因此模型格式需要是save_model.pb的格式&#xff0c;本篇文章介绍将pytorch转化为tensorflow格式模型方式。 核心过程&#xff1a;pytorch>onnx>tensorflow 一、pytorch转onn…

git clean 命令

git clean -n //显示要删除的文件&#xff0c;clean的演习&#xff0c;告诉哪些文件删除&#xff0c;只是一个提醒。 git clean -dn //显示要删除的文件和目录 git clean -f //删除未追踪的文件 git clean -dff //删除未追踪的目录 git clean -df //清除所有未跟踪文件&#xf…

开源数据集分类汇总(医学,卫星,分割,分类,人脸,农业,姿势等)

本文汇总了医学图像、卫星图像、语义分割、自动驾驶、图像分类、人脸、农业、打架识别等多个方向的数据集资源&#xff0c;均附有下载链接。 该文章仅用于学习记录&#xff0c;禁止商业使用&#xff01; 1.医学图像 疟疾细胞图像数据集 下载链接&#xff1a;http://suo.nz/2V…