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

简介: 4.1 正则表达式入门    1 正则表达式是基于样式匹配的文本处理技术的关键所在    2 正则表达式是用于绝大多数文本处理工具的一种语言    3 正则表达式的基本组成部分       正则表达式                 ...


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

       


目录
相关文章
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
765 3
Linux系统初始化脚本
|
7月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
674 10
|
7月前
|
算法 Linux Shell
Linux实用技能:打包压缩、热键、Shell与权限管理
本文详解Linux打包压缩技巧、常用命令与原理,涵盖.zip与.tgz格式操作、跨系统传文件方法、Shell运行机制及权限管理,助你高效使用Linux系统。
Linux实用技能:打包压缩、热键、Shell与权限管理
|
7月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
690 3
|
10月前
|
Shell
Shell脚本循环控制:shift、continue、break、exit指令
使用这些命令可以让你的Shell脚本像有生命一样动起来。正确使用它们,你的脚本就能像一场精心编排的舞蹈剧目,既有旋律的起伏,也有节奏的跳跃,最终以一场惊艳的表演结束。每一个动作、每一个转折点,都准确、优雅地完成所需要表达的逻辑。如此,你的脚本不只是冰冷的代码,它透过终端的界面,跳着有节奏的舞蹈,走进观众——使用者的心中。
366 60
|
7月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
9月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
1115 1
|
11月前
|
Java Linux
自定义linux脚本用于快速jar包启动、停止、重启
自定义linux脚本用于快速jar包启动、停止、重启
453 29
|
11月前
|
存储 Unix Shell
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
503 17
|
11月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
598 3