本文关键词:shell 判断、grep正则表达式使用和贪婪匹配理解

1. if [ $a -le $b ], 一开始自学的时候我以为 [ ... ] 就是普通的,语法规定的结构,结果其实人家是"test"的变体,它的效果等同于使用 " test ... ",结果是将指令 ... 执行完了以后输出出来的东西作为返回值。注意,他并不是能执行所有的命令,作为“判断符号”,他要求里面的指令运行结果是 TRUE 或者 FALSE。

2. 如果xxx,就输出xxx,除了使用 if 判断语句来实现以外,还可以用 [ xxxx ] && echo xxxx && xxxxx 这样的方式来实现。原理是当一条指令执行完,只要没有报错,而且他不是一个判断式,那么它就会返回一个 TRUE ,因此想刚才那种写法就能用一个判断式子写出一连串的后续操作。不过感觉最好不要用这个方法写太长,代码会很不好看的。

3. 多条件判断有两种写法哦! [ $xxx == xxx -o/-a $yyy == yyy ]  和  [ $xxx == xxx ] ||/&& [ $yyy == yyy ] 都可以。值得注意的是,前后要留有空格才可以,并且使用 || 和 && 要在 [ ] 的外面才行。

4.[ "$xxx" == "xxx" ] 才是最稳妥的写法,不然bash会出各种奇奇怪怪的问题。

5.对于bash,它概念里的块作用域(BlockScope,JavaScript 说法)用小括号()包裹。所谓块作用域,是说在这个区域内定义的变量,离开这个区域无法被访问到,大致和Java里面的局部变量比较类似,也类似于JS里面的 “let” 关键字定义的变量。

6.grep 命令在使用的时候可以通过管道来增强其他命令的效果,比如 which bin | grep 'username' 就可以查找路径里面带有username字符串的bin文件夹的位置咯。注意,单引号不要省略,因为在写正则表达式的时候,没有单引号转义字符 \ 将工作不正常!

对于Bash,七条命令有五种不同的含义(下面的x<n>代表n个字母)。他们分别是:(1,2,7)查找“x\{0-2}”;(3)查找“x\{0-4}”;(4)查找“x\{0-4\}”;(5)查找一个0-4字母组成的字符串;(6)语法错误。

为什么上面的例子中明明是 \{0,4\} 却标红了五个字母?我的理解是adsfx中,按照正则表达式贪婪匹配(能标红最多字符的方式匹配)原则,字符串里面找到了第一个匹配表达式的字符之后,还会继续向右寻找符合要求的字符串,于是就,按照"x0"这个条件把全文所有字母标红了。实际上,他匹配到的是这样一个数组:

[ 'adsf','x','dad' ]。

下面的图就能更清楚地显示这一点!

这三个体现了贪婪匹配的原则——尽可能标出最多的字符。注意x后面那是个 1 不是 l

为什么" 52148962asdfaadsfx1dad4248 "里面没有继续匹配比如"sdfaad"这样的串呢?因为已经匹配的串asdfaa已经不能参与匹配了,剩下的dsfx只有四个字母,不符合要求了!

那么非贪婪匹配是怎么一回事?非贪婪匹配又叫做懒惰匹配,grep原生不支持这种匹配模式,需要加上 -P 使用Perl语法才能执行,只需要在量词后面加上?(直接加,不要有任何的空格)就可以!

非贪婪匹配返回的结果是尽可能短的(而不是尽可能长),一般用于".*"这种广泛匹配上,比如下面的例子,诸位好汉可以猜一猜他们的输出结果是什么,以及为什么这样输出(输出在绿色的方块下面):

练习题(?)

我自己的一些看法,不知道有无错误,希望各位看官如果有空,和我讨论一下

[2019.03.22] Linux 学习心得(1)的更多相关文章

  1. [2019.04.01]Linux 学习心得(2)-- tar 命令的理解

    这篇文章并不是发布最早的但是阅读量却每天都见长,很想知道各位大大是怎么找到这篇文章的.如果不忙,还请各位大大评论一下我看看,没准我可以为大家改进一下本文,提升一下质量. =============== ...

  2. linux学习心得之目录树开端与/etc(图文)

    linux学习心得之目录树开端与/etc(图文) linux中“一切皆文件”,学习linux一年了,在学习过程中对目录树的一点心得,分享给大家,有不对的地方敬请斧正. 不多说了,先上图: 根目录: / ...

  3. Linux学习心得之 Linux下命令行Android开发环境的搭建

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Linux学习心得之 Linux下命令行Android开发环境的搭建 1. 前言2. Jav ...

  4. Linux学习心得之 Linux下ant安装与使用

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Linux学习心得之 Linux下ant安装与使用 1. 前言2. ant安装3. 简单的a ...

  5. Linux学习心得之 双显卡、中文输入法及svn初步使用

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Linux学习心得之 双显卡.中文输入法及svn初步使用 1.前言 2.Linux双显卡解决 ...

  6. linux学习心得之vim/Cvim篇

    linux学习心得之vim/Cvim篇 在linux 下,vim 时一种最常见的编辑器,很多linux的发行版就自带了.我的是CentOS 6.3. 基本上Vim共分为3种模式,分别是一般模式,编辑模 ...

  7. Linux学习心得之 LVM管理与Linux系统安装

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 LVM管理与Linux系统安装 1.前言 2.LVM 简介与术语 3.LVM 使用 4.Li ...

  8. [2019.03.25]Linux中的查找

    TMUX天下第一 全世界所有用CLI Linux的人都应该用TMUX,我爱它! ======================== 以下是正文 ======================== Linu ...

  9. 2019/4/17 Linux学习

    一.Linux的文件系统 其中/prov./srv./sys 文件为文件系统,技术不过硬不要去修改:二.关于Xshell.Xft1.服务器的端口可有65535个可设置,开的越多安全性越差:2.远程登录 ...

随机推荐

  1. 记一次按需加载和npm模块发布实践

    按需加载 在使用 lodash 的时候我们可以使用这样的代码 //一 import {omit} from "lodash"; //二 import l from "lo ...

  2. HttpClient封装方法

    //post请求 public static string PostRequest(string url, HttpContent data) { var handler = new HttpClie ...

  3. 用bat批处理程序通过DOS命令行删除所有的空文件夹

    用过gothub或者码云的同学都知道,不包含任何文件的空文件夹上传提交时不被允许的.当然你可以在空文件下创建.keep文件(或.gitkeep文件),然后就可以上传了. 但是如果空文件夹比较多,并且我 ...

  4. C#根据屏幕分辨率改变图片尺寸

    最近工作中遇到一个问题,就是需要将程序文件夹中的图片根据此时电脑屏幕的分辨率来重新改变图片尺寸 以下为代码实现过程: 1.获取文件夹中的图片,此文件夹名为exe程序同目录下 //读取文件夹中文件 Di ...

  5. 微信H5页面 会被软键盘顶起来

    问题描述:H5页面在微信中打开,input输入框获取焦点时,页面被软键盘顶上去:关闭软键盘时,页面不会自动下来(恢复初始状态) H5页面在微信中初始状态如下图: input输入框获取焦点时,页面被软键 ...

  6. mac git从代码仓库克隆代码,修改并上传

    1:添加本地秘钥到代码仓库中 open ~/ .ssh 以github为例: mac 命令行输入open ~/ .ssh,打开id_rsa.pub文件中的内容,复制到github->settin ...

  7. Ionic3关闭弹出页面,跳转到列表后刷新父页面

    记得上次写过一篇如何弹出页面的文章,好像是2月28号ionic3 Modal组件那一篇,这篇也算那一篇的续集吧!这篇是弹出的页面关闭后刷新父页面的干活!上代码! 弹出页面:(关闭的时候可以传入值,再父 ...

  8. 深入浅出ES6教程模块化

    大家好,本人名叫苏日俪格,大家叫我 (格格) 就好,在上一章节中我们学到了Promise的用法,下面我们一起来继续学习模块化: JavaScript本身是不支持模块化的,只不过后来一些社区的大佬制定了 ...

  9. PostgreSQL For Windows 全功能精简版

    预览 精简部分 保留全部 PostgreSQL 相关功能 删除自带的 pgadmin 4 删除文档 删除开发用头文件 删除开发用静态连接库 删除 Stack Build 工具 写了一个管理数据库用的批 ...

  10. maven-3.5.3通过eclipse打包问题(1)

    1.maven版本:3.5.3 2.ide: Eclipse Oxygen.2 (4.7.2)(Version: 3.9.2.RELEASE) 3. 配置ide 错误原因: 解决方法以及运行结果: