Linux Shell 脚本攻略 ---- 第四章 让文本飞

4.1 正则表达式入门

   1 正则表达式是基于样式匹配的文本处理技术的关键所在

   2 正则表达式是用于绝大多数文本处理工具的一种语言

   3 正则表达式的基本组成部分

      正则表达式                 描述             

               ^                      行起始标记      

               $                      行尾标记

                .                      匹配任意一个字符

               []                      匹配包含在[]之中的任意一个字符

               [^]                    匹配除了[]之外的任意一个字符

               [-]                     匹配[]中指定范围内的任意一个字符

               ?                      匹配之前的项1次或0次

               +                      匹配之前的项1次或多次

               *                       匹配之前的项0次或多次

               {n}                    匹配之前的项n次

               {n,}                   匹配之前的项至少n次

               {n,m}               匹配之前的项至少n次最大m次

    4 为了匹配一个IP地址,可以使用下面的正则表达式

         [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

         我们知道IP地址通常是由点号分割的4个整数,每个整数的值是0-255

    5 我们在字符前面放一个”\",这种做法是称为对字符的转制

4.2 用grep在文件中搜索文本

    1 grep命令是UNIX中用于文本搜索的大师级工具,它能够接受正则表达式和通配符

    2 在文件中搜索一个单词: grep word file

    3 grep命令也可以对多个文件进行搜索: grep word file1 file2 file3...

    4 如果想要打印包含word之外的所有行可使用: grep -v word file

    5 统计文件或文本中包含匹配字符串的行数: grep -c word file

    6 打印出包含匹配字符串的行数: grep -n word file

    7 如果需要在多级目录中对文本进行递归搜索,可以使用: grep word path -R -n

    8 忽略样式中的大小写: grep -i word file

    9 打印出匹配文件之前或之后的行

       要打印匹配某个结果之后3行: grep word -A 3 file

       要打印匹配某个结果之前的3行: grep word -B 3 file

       要打印匹配某个结果的之前及之后3行: grep word -C 3 file

4.3 用cut按列切分文件

    1 cut是一个帮我们将文本按列进行切分的小工具,它也可以通过指定定界符

    2 为了提取第一个字段或列,可以使用下面的方法

        cut -f field_list file  // field_list是要显示的列

    3 cut -f 2,3 file // 这条命令将显示第2,第3列

    4 我们也可以利用-complement选项对提取的字段进行补集运算,假设有多个字段,你希望打印出除了第3列之外的所有列,则可以使用: cut -f3 --complement file

    5 要指定字段的定界符,使用-d选项: cut -f2 -d";" file // 命令显示第2列,用";"做为分割符

    6 如果要切分出第n到m个字符可以使用: cut -cn-m file

  

4.4 sed入门

    1 sed是stream editor(流编辑器)的缩写,它是文本处理中非常重要的工具,它能够完美的配合正则表达式使用,功能不同反响

    2 sed可以替换给文本中的字符串,它可以利用正则表达式进行匹配

       sed 's/pattern/replace_string/' file

    3 如果使用-i选项,可以将替换结果应用于原文件: sed -i 's/pattern/replace_string/' file

    4 用sed移除空白行: sed '/^$/d' file 

    5 利用管道组多个sed命令这种方法可以用下面的方式替换: sed expression | sed expression 等价于sed 'expression ; expression'

    

4.5 awk入门

    1 awk脚本的结构基本如下所示: awk 'BEGIN{statement} pattern{statement}END{statement}'

    2 一个awk脚本通常有三个部分组成:BEGIN语句块,END语句块和能够使用模式匹配的语句块。这三个部分是可选的,它们中的任何一个部分都可以不出现在脚本中,脚本通常包含在单引号中或双引号中

    3 awk命令的工作方式

      (1) 执行BEGIN{statement}语句块中的语句

      (2) 从文件或stdin中读取一行,然后执行pattern{statement},重复这个过程,直到文件全部读取完毕

      (3) 当读至输入流末尾的时候,执行END{statement}语句块

    4 BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,诸如变量的初始化,打印输出表格的表头语句等等

    5 END语句块和BEGIN类似,END语句在awk从输入流中读取完毕之后被执行,像打印所有行的结果这类信息一般都是放在END语句块中执行

    6 最终要的部分是pattern语句块中的部分,这个语句块同样也是可选的,如果不提供,则默认执行print,即打印每一个读取的行

    7 当使用不带参数的pring时,它会打出当前行。关于print,需要记住的是:当pring的参数是以逗号进行分割时,参数打印则以空格做为定界符,在awk的print中双引号是被当做拼接操作符使用的

    8 awk的一些特殊变量

       NR: 表示记录数量,在执行的过程中相当于当前行号

       NF: 表示字段数量,在执行过程中对应于当前行的字段数

       $0: 这个变量包含执行过程中当前行的文本内容

       $1: 这个变量包含第一个字段的文本内容

       $2: 这个变量包含第二个字段的文本内容

    9 通常grep是默认读取一个文件的所有行,如果只想读取某一行,可以使用getline

    10 awk有很多内置的函数

         length(string): 返回字符串的长度

         index(string, search_string): 返回search_string在字符串中的出现的位置

         split(string, array, delimiter): 用定界符生成一个字符串列表,并将该列表存入数组

         

4.6 替换文本或文件中的字符串

    1 可以使用下面的方式替换一个字符串或样式

       sed 's/pattern/replace_string/g' file //这条命令会替换所有匹配到的项,/g的意识是全局(global),这就意味着它会替换文件中所有匹配的内容

    2 当文件名传递给sed的时候,sed将输出写到stdout,如果不想把输出结果输送到stdout,而是将更改保存到原文件中可以使用-i选项 sed 's/pattern/replace_string/g' -i file  

4.7 按列合并文件

    1 可以使用paste命令实现按列拼接: paste file1 file2 file3

    2 默认的定界符是制表符,也可以使用-d来明确指定定界符

       paste file1 file2 -d "," // 指定定界符是","

 

4.8 打印文件或行中的第n个单词或列

    1 用下面的命令打印第五列

       awk '{print $5}' file // 这个命令将打印文件file的第五列

    2 要打印从M行到N行这个范围的所有文本,使用下面的语法

       awk 'NR==N , NR==M' file

    3 命令tac可以做到逆序打印文件

       seq 5 | tac // 这个命令将输出5 4 3 2 1

       tac file // 这个命令将逆序打印处文件file

    4 用awk实现head和tail还有tac 

       awk 'NR <= 10' file // 这个命令默认打印处文件file的前10行

       awk '{buffer[NR%10]=$0}END{for(i=1;i<11;i++)print buffer[i%10]} file // 这个命令默认打印文件file的最后10行

       awk '{buffer[NR]=$0}END{for(i=NR;i>0;i--)print buffer[i]}' file // 这个命令默认打印逆序打印出文件file

       

时间: 2025-01-30 03:47:11

Linux Shell 脚本攻略 ---- 第四章 让文本飞的相关文章

Linux Shell 脚本攻略 - 第三章 以文件之名

3.1 生成任意大小文件     1 创建特定大小的文件最简单的方法是使用dd命令,dd命令会克隆给定的输入内容,然后将一份一模一样的副本写道输出     2 stdin,设备文件,普通文件等都可以作为输入,stdout,设备文件,普通文件等也可以作为输出     3 例子: dd if=/dev/zero of=data bs=1M count=1        该命令会在当面目录创建一个1MB大小的文件data,来看一下参数,if代表输入文件,of代表输出文件,bs代表以字节为单位的块大小,

Linux Shell 脚本攻略 --- 第六章 B计划

6.1 用tar归档     1 tar命令可以用来归档文件,可以用tar将多个文件和文件夹保存为单个文件,同时还能保留所有文件属性,如所有者,权限等,由该命令创建的文件通常称为tarball     2 按照下面的方法,用tar对文件进行归档: tar -cf output.tar sources        例如tar -cf output.tar file1 file2 file3....        命令中的-c代表的是创建文件,-f代表的是指定文件名     3 向归档中添加文件可

Linux shell 脚本攻略 第一章 小试牛刀

 1.1 简介      1 打开终端后,就会出现一个提示符,形式通常如下         username@hostname$ 或者root@hostname#      2 $表示的是普通用户,#表示的是超级用户.超级用户是Linux中权限最高的用户      3 有两种运行脚本的方式         sh script.sh 或者是 path script (path是脚本所在的目录)      4 在bash中每个命令是通过分号";"来分开的  1.2 终端打印      1

Linux shell 脚本攻略 第二章 命令之乐

2.1 用cat进行拼接     1 cat命令是一个日常会使用到的简单命令,cat本身表示concatenate(拼接)     2 用cat读取文件的一般格式是        cat file1 file2 file3....  // 这个命令将命令行参数的文件内容拼接在一起输出     3 cat命令不仅可以读取文件并拼接数据,它还能够从标准输入中进行读取.要从标准输入中读取,就要使用管道        stand_ouput | cat     4 cat命令可以用来压缩多个空行,使得被

Linux Shell 脚本攻略 ---- 第九章 管理重任p

9.1 收集进程信息     1 进程是程序的运行实例,运行在一台计算机中的多个进程各自分配了一个称为进程ID的唯一标识数字     2 同一个程序的多个实例可以同时运行,但是他们的进程ID却互不相同     3 一个进程包括多种属性,例如拥有该进程的用户,进程使用的内存数量,进程占用的CPU等     4 ps是收集进程信息的重要工具,它提供了信息包括:拥有进程的用户,进程的起始时间,进程所对应的命令行路径,进程ID,进程所属的终端,进程使用的内存,进程占用的CPU     5 top对应系统

Linux Shell 脚本攻略 ---- 第八章 当个好管家

8.1 统计磁盘的使用情况      1 磁盘空间是一种有限资源      2 df和du是Linux中用于统计磁盘使用情况的重要命令,df是disk free的缩写,du是disk usage的缩写      3 找出某个文件(或多个文件)占用的磁盘空间: du file1 file2 ...      // 统计结果默认是以字节作为计算单位      4 要获得某个目录中所有文件的磁盘使用情况,并在每一行中显示各个文件的磁盘占用详情,可以使用         du -a DIRECTORY

Linux Shell脚本系列教程(四):使用函数添加环境变量

  这篇文章主要介绍了Linux Shell脚本系列教程(四):使用函数添加环境变量,本文对环境变量的一知识作了介绍,并给出普通添加环境变量和使用函数添加环境变量的方法,需要的朋友可以参考下 一.简介 环境变量通常用于存储路径列表,这些路径用于搜索可执行文件.库文件等.例如:$PATH.$LD_LIBRARY_PATH,它们通常看起来像这样: 代码如下: PATH=/usr/bin;bin LD_LIBRARY_PATH=/usr/lib;lib 这意味着只要shell需要运行二进制可执行文件时

Linux Shell脚本系列教程(四):使用函数添加环境变量_linux shell

一.简介 环境变量通常用于存储路径列表,这些路径用于搜索可执行文件.库文件等.例如:$PATH.$LD_LIBRARY_PATH,它们通常看起来像这样: 复制代码 代码如下: PATH=/usr/bin;bin LD_LIBRARY_PATH=/usr/lib;lib 这意味着只要shell需要运行二进制可执行文件时,它会首先查找/usr/bin,然后查找/bin.在ubuntu14.04中,PATH和LD_LIBRARY_PATH存储的路径如下所示: 复制代码 代码如下: PATH=/usr/

Linux Shell脚本查看NUMA信息_linux shell

Nova在NFV场景下会提供NUMA相关高级特性,这里提供一个脚本查看计算节点的NUMA相关信息. #!/bin/bash function get_nr_processor() { grep '^processor' /proc/cpuinfo | wc -l } function get_nr_socket() { grep 'physical id' /proc/cpuinfo | awk -F: '{ print $2 | "sort -un"}' | wc -l } func