`
从此醉
  • 浏览: 1047411 次
  • 性别: Icon_minigender_1
  • 来自: US
社区版块
存档分类
最新评论

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


分享到:
评论

相关推荐

    Linux Shell编程从初学到精通 第2版

    第4章 sed命令和awk编程 64 第5章 文件的排序、合并和分割 105 第6章 变量和引用 133 第7章 退出、测试、判断及操作符 157 第8章 循环与结构化命令 187 第9章 变量的高级用法 217 第10章 I/O重定向 243 第11...

    shell编程指南,shell脚本,本书共分五部分全。grep家族,sed,AWK,正则表达式,tr用法

    第16章 shell脚本介绍 151 第17章 条件测试 154 第18章 控制流结构 160 第19章 shell函数 202 第20章 向脚本传递参数 224 第21章 创建屏幕输出 236 第22章 创建屏幕输入 252 第23章 调试脚本 274 第24章 shell嵌入...

    LINUX与UNIX SHELL编程指南

    第四章 文件名置换 第五章 SHELL输入输出 第六章 命令执行顺序 第二部分 文本过滤 第七章 正则表达式介绍 第八章 GERP家族 第九章 AWK介绍 第十章 SED用法介绍 第十一章 合并与分割 第十二章 TR用法 第三部分 登录...

    Shell脚本专家指南

    第4章 比较和测试 比较的基本原理 第5章 接受命令行选项、开关和参数 第6章 测试变量和设置默认值 6.1 设置默认值 6.2 变量替换 6.2.1 :=句法 6.2.2 =句法 6.2.3 :-句法 6.2.4 -句法 6.2.5 :?句法 6.2.6 ?句法 ...

    绝版经典 LINUX与UNIX SHELL编程指南 PDF 高清版 [16.3M]

    第四章 文件名置换 第五章 SHELL输入输出 第六章 命令执行顺序 第二部分 文本过滤 第七章 正则表达式介绍 第八章 GERP家族 第九章 AWK介绍 第十章 SED用法介绍 第十一章 合并与分割 第十二章 TR用法 第三...

    Linux中Shell截取某行某列信息

    背景:执行shell命令,抓取shell返回信息中的所...使用awk抓取第四列,$4代表第四列,以空格区分。执行 udhcpc | grep “DNS” | sed -n ‘2p’ | awk ‘{print $4}’ 最后使用tr去除字符串最后的\n,默认会包含。执行

    Linux Shell 编程 入门、提高、精通

    第16章shell脚本介绍 第17章条件测试 第18章控制流结构 第19章shell 函数 第20章向脚本传递参数 第21章创建屏幕输出 第22章创建屏幕输入 第23章调试脚本 第24章shell嵌入命令 第五部分高级shell编程技巧 第25章深入...

    Linux与UNIX Shell编程指南.rar

    第十六章 SHELL脚本介绍 第十七章 条件测试 第十八章 控制流结构 第十九章 SHELL函数 第二十章 向脚本传递参数 第二一章 创建屏幕输出 第二二章 创建屏幕输入 第二三章 调试脚本 第二四章 SHELL嵌入命令 第五部分 ...

    Linux命令学习 shell pdf格式

    第十六章 shell脚本介绍 第十七章 条件测试 第十八章 控制流结构 第十九章 shell函数 第二十章 向脚本传递参数 第二十一章 创建屏幕输出 第二十二章 创建屏幕输入 第二十三章 调试脚本 第二十四章 shell嵌入命令 第...

    新版Linux Shell编程实训(全)20170518.docx

    1.4.1 第一个shell脚本:Hello World 58 1.4.2 脚本介绍 59 1.4.3 shell程序结构 59 1.4.4 shell脚本运行 60 任务1.5 Shell案例:打印有色彩的文本 61 任务1.6 Shell案例:图案打印 62 练习(每题10分,共计100分) ...

    Linux系统管理完全手册--part01(共2卷)

    第四章 理解用户和文件系统 第五章 理解文本处理过程 第六章 进程管理 第七章 使用网络客户端程序 第八章 安装Linux 第九章 理解系统初始化过程 第十章 管理软件包和文件系统 第十一章 管理用户 第十二章 配置网络 ...

    Shell脚本学习笔记

    第4章 处理用户输入与显示数据 76 4.1 命令行参数与特殊的参数变量 76 4.1.1 读取参数 76 4.1.2 读取程序名称 77 4.1.3 测试参数 77 4.1.4 参数计数 77 4.1.5 获取所有数据 78 4.2 移位与选项 79 4.2.1 移位 79 ...

    Linux与unix shell编程指南.rar

    第4章 文件名置换 31 第5章 shell输入与输出 34 第6章 命令执行顺序 46 第二部分 文本过滤 第7章 正则表达式介绍 49 第8章 grep家族 56 第9章 AWK介绍 66 第10章 sed 用法介绍 89 第11章 合并与分割 104 第12章 tr...

    LINUX与UNIX_Shell编程指南

    第一部分 shell 第1章 文件安全与权限 第2章 使用find和xargs 第3章 后台执行命令 第4章 文件名置换 第5章 shell输入与输出 第6章 命令执行顺序 ...第16章 shell脚本介绍 第17章 条件测试 等等,内容较多

    Linux Shell编程3/3

    _grep家族 |_awk介绍 |_sed用法介绍 |_合并与分割 |_tr用法 第三部分登录环境 |_登录环境 |_环境和shell变量 |_引号 第四部分基础shell编程 |_shell脚本介绍 |_条件测试 |_控制...

    Linux系统管理完全手册--part02(共2卷)

    第四章 理解用户和文件系统 第五章 理解文本处理过程 第六章 进程管理 第七章 使用网络客户端程序 第八章 安装Linux 第九章 理解系统初始化过程 第十章 管理软件包和文件系统 第十一章 管理用户 第十二章 配置网络 ...

    LINUX与UNIX SHELL编程指南(很全)

    第4章 文件名置换 31 4.1 使用* 31 4.2 使用? 32 4.3 使用[...]和[!...] 32 4.4 小结 33 第5章 shell输入与输出 34 5.1 echo 34 5.2 read 35 5.3 cat 37 5.4 管道 38 5.5 tee 39 5.6 标准输入、输出和错误 40 5.6.1...

    Linux与UNIX Shell编程指南.

    第十六章 SHELL脚本介绍 第十七章 条件测试 第十八章 控制流结构 第十九章 SHELL函数 第二十章 向脚本传递参数 第二一章 创建屏幕输出 第二二章 创建屏幕输入 第二三章 调试脚本 第二四章 SHELL嵌入命令 第五部分 ...

Global site tag (gtag.js) - Google Analytics