shell编程1

一、正则表达式

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

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

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、正则实例:

匹配邮箱():

  [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”键,不支持空格。

举例:提取第几列的内容

shell编程1

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

  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键

  shell编程1

    使用printf命令输出文件内容

 shell编程1

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

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

shell编程1

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

shell编程1

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

(3)awk基本使用

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

 条件:

    shell编程1

     动作:

    格式化输出

    流程控制语句

 举例:

       shell编程1

       shell编程1

    shell编程1

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

        shell编程1

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

    shell编程1

awk内置变量:

    shell编程1

举例:

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

  {开始执行{分隔符是“:”} {输出第一字段和第三字段 输出行号(NR值)字段数(NF值)}             shell编程1

相关推荐