码迷,mamicode.com
首页 > 系统相关 > 详细

shell编程1

时间:2020-02-14 18:23:34      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:alt   passwd   打印   使用   数位   16px   说明   替换   去除   

 

一、正则表达式

  正则表达式和通配符的区别:

    正则表达式是用来在文件中匹配符合条件的字符串,通配符用来匹配符合条件的文件名。

1、基础正则表达式

 *   前一个字符匹配0次或任意多次    例如:grep "aa*" test.txt  在test.txt文档中匹配包含a的行,grep "aaaa*" test.txt  至少包含3个a

 .   匹配除了换行符外的任意一个字符  例如:grep “s..d” test.txt  匹配文件中的said,sood等任意字符    说明:“.*”表示匹配所有内容

 ^   匹配行首。例如:^hello会匹配以hello开头的行

 $   匹配行尾。例如:hello$会匹配以hello结尾的行    说明:"^$" 匹配空白行,去除空白行 grep -v "^$"

 []   匹配括号中指定的任意一个字符,只匹配一个字符。如:[aoeiu]匹配任意一个元音字母,[0-9]匹配任意一位数字,[a-z][0-9]匹配小写字母和一位数字构成的两位字符。

 [^ ]   匹配除括号中的字符以外的任意一个字符,例如:[^0-9]匹配任意一位非数字字符,[^a-z]表示任意一位非小写字母

 \    转义符

 \{n\}  表示其前面的字符恰好出现n次。例如:[0-9]\{4\}匹配4位数字,[1][3-8][0-9]\{9\}匹配手机号码

 \{n,\}  表示其前面的字符出现不小于n次。

 \{n,m\} 表示其前面的字符至少出现n次,最多出现m次。例如:[a-z]\{6,8\}匹配6到8位的小写字母 

2、扩展正则表达式(不常用) 

 +:前一个字符匹配1次或任意多次。例如:“go+gle”会匹配“gogle”、“google”等,当然如果“o”有更多个,也能匹配

 ?:前一个字符匹配0次或1次。例如:“colou?r”可以匹配“colour”或“color”

 |:匹配两个或多个分支选择。例如:”was|his“会匹配既包含”was“的行,也匹配包含”his“的行

 ():匹配其整体为一个字符,即模式单元。可以理解为由多个单个字符组成的大字符。如:“(dog)+”会匹配“dog”、“dogdog”、“dogdogdog”等,因为被()包含的字符会当成一个整体。但“hello (world|earth)”会匹配“hello world”及“hello earth”

3、正则实例:

  匹配邮箱(sc@163.com):

    [0-9a-zA-Z_]+@[0-9a-zA-Z_]+(\.[0-9a-zA-Z_]+)(1,3) 

    解释:

      [0-9a-zA-Z_]  表示数字、小写字母、大写字母或者_中的任意字符

      +       前一个字符匹配1次或任意多次

      \.          将.转成普通字符串

 

  IP地址匹配:

    “^(([0-9]\.)|([1-9][0-9]\.)|(1[0-9][0-9]\.)|(2[0-4][0-9]\.)|(25[0-5]\.)){3}(([0-9]\.)|([1-9][0-9]\.)|(1[0-9][0-9]\.)|(2[0-4][0-9]\.)|(25[0-5]\.))$”

4、字符串截取和替换命令

(1)cut列提取命令

    cut [选项] 文件名

  选项:

    -f 列号:提取第几列

    -d 分隔符:按照指定分隔符分割列

    -c 字符范围(了解):不依赖分隔符来区分列,而是通过字符范围(行首为0)来进行字段提取。

              “n-”表示从第n个字符到行尾,“n-m”从第n个字符到第m个字符,“-m”表示从第1个字符到第m个字符。

    注意:cut命令的默认分割符是制表符,及“tab”键,不支持空格。

 

  举例:提取第几列的内容

  技术图片

 

  若要提取多列,只要列号直接用”,“分开:

    cut -f 2,3 student.txt 

  指定分隔符:

    cut -d ":" -f 1,3 student.txt  

    以“:”作为分隔符,提取student.txt文件的第一列和第三列。

(2)printf格式化输出

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

  输出类型:

    %ns:输出字符串。n是数字指代输出几个字符

    %ni:输出整数。n是数字指代输出几个数字

    %m.nf:输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%8.2f代表共输出8位数,其中2位是小数,6位是整数。

  输出格式:

    \n:换行

    \r:回车,也就是Enter键

    \t:水平输出退格键,也就是Tab键

    \v:垂直输出退格键,也就是Tab键

    技术图片

    使用printf命令输出文件内容

   技术图片

    会发现很乱,不是我们想要的。

  printf命令,需要制定输出格式。若不指定输出格式,则会把所有输出内容连在一起输出。

  技术图片

    如果不想把成绩当成字符串输出,而是按照整型和浮点型输出,则如下这样:

  技术图片

    这里报错是因为第一行不支持整型输出,没关系,后面再介绍。

(3)awk基本使用

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

   条件:

      技术图片

     动作:

      格式化输出

      流程控制语句

   举例:

       技术图片

       技术图片

      技术图片

      如果第二字段中输入包含有“Sc”字符,则打印第六字段数据:

        技术图片

        注意:在awk中,使用"//"包含的字符串,awk命令才会查找。

      技术图片

  awk内置变量:

      技术图片

  举例:

    cat /etc/passwd |grep "/bin/bash" | awk ‘BEGIN{FS=":"} {printf $1 "\t" $3 "\t 行号: " NR "\t 字段数: " NF "\n"}‘

    {开始执行{分隔符是“:”} {输出第一字段和第三字段 输出行号(NR值)字段数(NF值)}             技术图片

 

shell编程1

标签:alt   passwd   打印   使用   数位   16px   说明   替换   去除   

原文地址:https://www.cnblogs.com/anthea/p/12308136.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!