《Linux Shell脚本攻略》学习笔记-第四章

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

4.1  简介

本章主要介绍sed、awk、grep、cut等命令这些工具可以相互结合以满足文本处理需求。

正则表达式是一种基础的模式匹配技术。

4.2 使用正则表达式

正则表达式是由字面文本和具有特殊意义的符号组成的。

1位置标记

位置标记锚点是标识字符串位置的正则表达式。

正则表达式

描述

示例

^

指定了匹配正则表达式的文本必须起始于字符串的首部

^tux能够匹配以tux起始的行

$

指定了匹配正则表达式的文本必须结束语目标字符串的尾部

tux$能够匹配以tux结尾的行

2标识符

标识符是正则表达式的基础组成部分。

正则表达式

描述

A

正则表达式必须匹配该字符

.

匹配任意一个字符

[]

匹配括号中的任意一个字符

[^]

匹配不在括号中的任意一个字符

3数量修饰符

一个标识符可以出现一次、多次或者不出现数量修饰符定义了模式可以出现的次数。

正则表达式

描述

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

+

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

*

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

{n}

匹配之前的项n次

{n,}

之前的项至少需要匹配n次

{n,m}

之前的项所匹配的最小次数和最多次数

4其他

正则表达式

描述

()

将括号中的内容视为一个整体

|

选择结构可以匹配|两边的任意一项

\

转义字符

5示例

4.3 使用grep在文件中搜索文本

1grep的用法

2递归搜索多个文件

3忽略模式中的大小写

4使用grep匹配多个模式

5在grep搜索中指定或者排除文件

6使用0值字节后缀的xargs和grep

-l告诉grep只输出有匹配出现的文件名-Z使得grep使用0值字节作为文件的终结符

7grep的静默输出

在静默模式中grep命令不会输出任何内容。它仅是运行命令然后根据命令执行成功与否返回退出状态。

8打印出匹配文本之前或之后的行

-A可以打印出匹配结果之后的行-B可以打印出匹配结果之前的行-A-B可以结合使用等价于-C

4.4 使用cut按列切分文件

cut命令可以按列而不是按行来切分文件。

1

2cut命令可以根据字节或者字符来指定选择范围

N-

从第N个字节、字符或字段开始到行尾

N-M

从第N个字节、字符或字段开始到第M个包括第M个在内字节、字符或字段

-M

从第1个字节、字符或字段开始到第M个包括第M个在内字节、字符或字段

-b表示字节-c表示字符-f用于定义字段

4.5 使用sed替换文本

sed最常见的用法就是进行文本替换。

1

2之前的例子中只替换了每行中模式首次匹配的内容g标记可以使sed执行全局替换

/#g标记可以使sed替换第#次出现的匹配

3sed命令会将s之后的字符视为命令分隔读。这允许我们更改默认的分隔符/

     如果分隔符的字符出现在模式中必须使用\对其进行转义。

4移除空行

5直接在文本中替换 sed -i\b表示单词边界。

6已匹配字符串标记&

可以用&指代模式所匹配到的字符串\w\+匹配每一个单词

7子串匹配标记

可以使用\#来指代出现在括号中的部分正则表达式所匹配到的内容。

8组合多个表达式

可以利用管道组合多个sed命令多个模式之间可以用分号分隔或者使用-e。

9引用

必须是双引号

4.6 使用awk进行高级文本处理

awk命令可以处理数据流。它支持关联数组、递归函数、条件语句等功能。

awk以逐行的形式处理文件。BEGIN之后的命令会先于公共语句块执行。对于匹配PATTERN的行awk会对其执行PATTERN之后的命令。最后在处理完整个文件之后awk会执行END之后的命令。

1输出文件行数

2最重要的部分就是和pattern关联的语句块。这个语句是可选的如果不提供则默认执行{print}即打印所读取到的每一行。

当使用不带参数的print时他会打印出当前行。print能够接受参数这些参数以逗号分隔在打印参数时则以空格作为参数之间的分隔符。在awk的print语句中双引号被当做拼接操作符使用。

3awk命令是一个解释器它能够解释并执行程序和shell一样它也包括了一些特殊变量。

特殊变量

含义

NR

记录编号

NF

字段数量

$0

该变量包含了当前记录的文本内容

$1

该变量包含了第一个字段的文本内容

$2

该变量包含了第二个字段的文本内容

4借助外部变量值传递给awk

5从getline读取行

awk默认读取文件中的所有行。如果只想读取某一行可以使用getline函数。

该函数的语法为getline var。变量var包含了特定行。

6使用过滤模式对awk处理的行进行过滤

7设置字段分隔符

8在awk中使用循环

4.7 统计特定文件中的词频

4.8 压缩和解压缩JavaScript

4.9 按列合并多个文件

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

4.11 打印指定行或者模式之间的文本

4.12 以逆序形式打印行

最简单的形式就是使用tac命令当然也可以用awk来搞定。

1tac

tac默认使用\n作为分隔符但是我们也可以使用选项-s指定其他分隔符

2awk

4.13 解析文本中的电子邮件地址和URL

1能够匹配邮件地址的正则表达式

2匹配HTTP URL的正则表达式

4.14 删除文件中包含特定单词的句子

sed是进行文本替换的不二之选我们可以利用sed将匹配的句子替换成空白。

4.15 对目录中的所有文件进行文本替换

4.16 文件切片与参数操作

1替换变量内容中的部分文本

2我们可以通过指定字符串的起始位置和长度来生成子串

${var:M:N}从第M+1个字符开始打印N个字符

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: shelllinux

“《Linux Shell脚本攻略》学习笔记-第四章” 的相关文章