Linux学习——shell编程之正则表达式和字符处理命令

shell编程之正则表达式一 正则表达式 1 什么是正则表达式 正则表达式用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分隔、匹配、查找及替换操作。2 shell编程之正则表达式与通配符 正则表达式:用于在文件中匹配符合条件的字符串。正则是包含匹配。grep 、awk 、sed等命令支持正则表达式。 通配符:用于匹配符合条件的文件名,通配符是完全匹配。ls、f

大家好,又见面了,我是全栈君。

shell编程之正则表达式

一 正则表达式
1 什么是正则表达式

    正则表达式用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分隔、匹配、查找及替换操作。

2 shell编程之正则表达式与通配符

正则表达式:用于在文件中匹配符合条件的字符串。正则是包含匹配。grep 、awk 、sed等命令支持正则表达式。

通配符:用于匹配符合条件的文件名,通配符是完全匹配。ls、find、cp 这些命令不支持正则表达式,只能使用shell自己的通配符来进行匹配。

通配符:
    - * 匹配任意内容(0个或者多个)     - ? 匹配任意一个内容     - [] 匹配中括号的一个字符

3 shell编程之基础正则表达式

正则表达式:基础正则和扩展正则

元字符: 
*  #重复匹配前一个字符0到多次
    a* #这种写法无意义
    aa* #查找包含a的字符串

.  #匹配除了换行符外任意一个字符,类似通配符?
    .*  #匹配全部内容

^  #匹配行首
$  #匹配行尾
    ^$ #会匹配空白行

[]  #匹配中括号中的指定任意一个字符,只匹配一个字符
    [0-9] 
    [a-z] 
    ^[0-9] #数字开头

[^] #匹配除了中括号的字符以外的任意一个字符,(取反)
    ^[^a-z] #匹配不用小写字母开头的行
    ^[^a-zA-Z] #匹配不用字母开头的行

\  #转义符,让特殊的字符丧失意义
    \.$ #匹配使用"."结尾的行

\{n\} #表示其前面的字符恰好出现n次
    a\{
  
  3\} #匹配a字母连续出现三次的字符串
    [0-9]\{
  
  3\}  #匹配包含连续的三个数字的字符串

\{n,\}  #表示其前面字符出现不少于n次。 
\{n,m\} #表示其前面的字符至少出现n次,最多出现m次

这里写图片描述
6 shell编程之正则表达式案例

匹配日期格式YYYY-MM-DD
        [0-9]\{ 
   4\}-[0-9]\{ 
   2\}-[0-9]\{ 
   2\}
匹配Ip
        [0-9]\{ 
   1,3\}.[0-9]\{ 
   1.3\}.[0-9]\{ 
   1.3\}.[0-9]\{ 
   1.3\}

备注:
grep行提取命令
grep -v ,取反

二 字符截取命令
1 shell字符截取命令之cut命令
列提取命令

cut [选项] 文件名

选项:
    -f 列号:提取第几列,(默认分隔符是制表符)
    -d 分隔符:按照指定分隔符分隔列

例子:截取当前系统登录的用户名
grep "/bin/bash" /ect/passwd | grep -v "root" | cut -f 1 -d ":" 

cut的局限性:
只能分隔规格的字符串
只能截取有规格的字符串

备注:df 查看系统当前的分区状态 df -h

2 shell字符截取命令之printf

标准输出命令,格式化输出!

printf ‘输出类型 输出格式’ 输出内容

输出类型:
 %ns : 输出字符串。n是数字指定输出几个字符
 %ni : 输出整数。n是数字指定输出几个数字
 %m.nf : 输出浮点数。m和n是数字。

        例如:%8.2 代表共输出8位,其中2位小数,6为整数。

输出格式:
        \a : 输出警告声音
        \b : 输出退格键
        \f : 清除屏幕
        \n :换行
        \r :回车
        \t :水平输出退格键,,也就是tab键
        \v :垂直输出退格键,也就是tab键

例子:
        printf '%s' $(cat test.txt) #不调整输出格式

3 shell字符截取命令之awk命令

列提取命令

awk ‘条件1{动作2} 条件2{动作2}…’ 文件名

条件:
        一般使用关系表达式作为条件
            x > 10 判断变量x是否大于10
            x >= 10 大于等于
动作:
        格式化输出
        流程控制语句

例子:
    awk '{printf $2 "\t" $4 "\n"}' text.txt
    df -h | awk '{print $1 "\t" $3}'

awk中print和printf
        printf,标准输出,需加换行符
        print,不需要加换行符,默认最后换行

4 shell字符字符替换命令之sed命令

字符替换, sed主要用来对数据进行选取、替换、删除、新增的命令。

sed [选项] ‘[动作]’ 文件名

选项:
        -n : sed 处理的行输出         -e :允许对输入数据应用多条sed命令编辑         -i : 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出 
动作:
         a : 追加
         c : 行替换
         i : 插入,插入一行或者多行
         d : 删除,删除指定的行
         p :打印,输出指定的行
         s :字串替换

三 字符处理命令

排序命令

sort [选项] 文件名

选项:
        -f :忽略大小写         -n :以数值型进行排序         -f :反向排序         -t :指定分隔符

统计命令
wc [选项] 文件名

选项:
        -l 只统计行数         -w 只统计单词数         -m 只统计字符数 

欢迎访问我的csdn博客,我们一同成长!

不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!

博客首页http://blog.csdn.net/u010648555

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121149.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • hostapd配置

    hostapd配置我们有个闲置的USB无线适配器(WIFI适配器),而我们的ISP路由器却是有线的。怎样把我们的家庭NAS服务器变成无线访问点(WAP),在不用买额外的WPA盒子的情况下,在Debian或Ubuntu系统下使用无线设备访问到它?你需要使用hostapd作为访问点和认证服务器。它实现了IEEE802.11访问点管理,IEEE802.1X/WPA/WPA2/EAP授权,RADIUS客户端,…

    2022年5月21日
    218
  • goland 2021.3.1激活破解方法「建议收藏」

    goland 2021.3.1激活破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    845
  • 香港免备案服务器是合法的吗?「建议收藏」

    香港免备案服务器是合法的吗?不管是否使用过香港服务器的用户,应该都听说过香港服务器可以不用备案,虽然大多数用户不太清楚香港服务器为什么不用备案,但知道香港服务器免备案是合法的就足够了,我在这里将说明关于香港服务器免备案的一切疑问。所谓的网站备案是指的根据国家互联网的规定,网站所有者必须向国家工信部申请网站内容审核和实名备案,有的网站还需要向当地的公安部进行监管备案,所有放在国内服务器上的网站只能通过备案才能访问上线。1、香港服务器为什么不用备案?  这主…

    2022年4月13日
    62
  • 各大公司Java后端开发面试题总结

    各大公司Java后端开发面试题总结ThreadLocal(线程变量副本)Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量。采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一个副本,每个线程都可以独立地改变自己的副本,而不会和其他线程的副本冲突。ThreadLocal类中维护一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值为对应线程的变量副本。Thre

    2022年5月6日
    36
  • 学习BoundsChecker

    对C++程序不熟悉,但是因为工作需要,要对一些程序进行测试分析,找出是否有内存泄露情况。在网上找到了大家比较推崇的BoundsChecker,安装后开始看软件自带的手册,为了让更多的同事一起学习,要将全英文的手册翻译成中文,在这个学习过程中,也把成果不断贴出来大家分享吧!今天先贴手册的目录                                                Boun

    2022年4月10日
    42
  • C语言实现哈夫曼编码_哈夫曼编码压缩文件c语言

    C语言实现哈夫曼编码_哈夫曼编码压缩文件c语言////霍夫曼编码//#include<stdio.h>#include<stdlib.h>#include<string.h>/**思路:用一个有序链表(从大到小)来保存节点,然后通过链表来构造霍夫曼树,再由霍夫曼树得到霍夫曼编码**/typedefstructhuffman_tree_node{intwe…………

    2025年7月30日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号