Shell脚本学习指南 [ 第三、四章 ] 查找与替换、文本处理工具

摘要:第三章讨论的是编写Shell脚本时经常用到的两个基本操作。第四章总共介绍了约30种处理文本文件的好用工具。

第三章 查找与替换

概括:本章讨论的是编写Shell脚本时经常用到的两个基本操作:文本查找、文本替换。

3.1  查找文本

如需从输入的数据文件中取出特定的文本行,主要的工具为grep程序。POSIX采用三种不同grep变体:grep、egrep、fgrep整合为单个版本,通过不同的选项,分别提供这三种行为模式。
who | grep -F root
上面使用-F选项,以查找固定字符串root。事实上,只要匹配的模式里未含有正则表达式的meta字符,则grep默认行为模式就等同于使用了-F。

3.2  正则表达式

POSIX的正则表达式有两种,基本正则表达式(BRE)以及扩展正则表达式(ERE)。
sed是处理简单字符串替换的主要工具。
在某些程序语言里,单个字符串可能包含数行,那种情况下,^与$指的分别是字符串的开头与结尾。
正则表达式匹配范例:
表达式 匹配
tolstoy 位于一行上任何位置的7个字母:tolstoy
^tolstoy 7个字母tolstoy,出现在一行的开头
tolstoy$ 7个字母tolstoy,出现在一行的结尾
^tolstoy$ 正好包括tolstoy这7个字母的一行,没有其他的任何字符
[Tt]olstoy 在一行上的任意位居中,含有Tolstoy或是tolstoy
tol.toy 在一行上的任意位居中,含有tol这3个字母,加上任何一个字符,再接着toy这三个字母
tol.*toy 在一行上的任意位居中,含有tol这3个字母,加上任意的0或多个字符,再继续toy这三个字母

区间表达式匹配规则:
\{n\} 前置正则表达式所得结果重现n次
\{n,\} 前置正则表达式所得结果重现至少n次
\{n,m\} 前置正则表达式所得结果重现n至m次

在s命令里以g结尾表示的是,全局性。如:
$ echo Tolstoy reads well. Tolstoy writes well. >example.txt 输入样本
$ sed ‘s/Tolstoy/Camus/‘ < example.txt 没有设置g
Camus reads well. Tolstoy writes well.
$ sed ‘s/Tolstoy/Camus/g‘< example.txt 设置了‘g‘
Camus reads well. Camus writes well.
$sed ‘s/Tolstoy/Camus/2‘ < example.txt 仅替代第二个匹配者
Tolstoy reads well.Camus writes well.

sed -n ‘10,42p‘ foo.xml 仅打印10-42行

3.3  字段处理

cut命令用以剪下选定的字符范围或字段,join则是用来结合记录中具有共同键值的字段的文件。
awk多半用于简单的“命令行程序”,当想要只显示选定的字段,或是重新安排行内的字段顺序时,就是awk派上用场的时候了。

awk ‘{ print $1}‘ file 打印第一个字段
awk ‘{ print $2,$5}‘ file 打印第2与第5个字段
awk ‘{ print $1,$NF}‘ file 打印第一个与最后一个字段
awk ‘NF>0 {print $0}‘ file 打印非空行
awk ‘NF>0‘ file 同上

第四章 文本处理工具

摘要:本章总共介绍了约30种处理文本文件的好用工具。它们都是功能很强的工具组,可用来编写Shell脚本。

4.1  排序文本

sort -t: -k1,1 file 以冒号隔开的第一个字段进行排序
sort -t: -k2nr,2 file 从字段2起始处开始,以数值类型反向排序并结束于字段3的结尾
sort -t: -k2n -k3n file 先以第二列排序,在以第三列排序
sort -t: -k2n -u file 输出键值字段匹配的唯一记录

4.2  删除重复

sort file |uniq 显示唯一的排序后的记录
sort file |uniq -c 计数唯一的排序后的记录
sort file |uniq -d 仅显示重复的记录
sort file |uniq -u 仅显示未重复的记录

4.3  重新格式化段落

fmt -s -w 10 file               长度大于10的行格式化为短的行

4.4  计算行数、字数以及字符数

echo hello wrold |wc 计算行数、字数、字节数
echo hello world |wc -c 计算字节数
echo hello world |wc -l 计算行数
echo hello world |wc -w 计算字数
wc file1 file2 计算两个文件里的数据

4.5  打印

4.6  提取开头或结尾数行

head -n file 输出文件的前n行
tail -n file 输出文件的后n行

时间: 2024-10-01 07:23:17

Shell脚本学习指南 [ 第三、四章 ] 查找与替换、文本处理工具的相关文章

笔记——shell脚本学习指南

<shell脚本学习指南>机械工业出版 ISBN 987-7-111-25504-8 第2章 2.4 初级陷阱 1.当今的系统,对#!这一行的长度限制从63到1024个字符都有,尽量不要超过64个字符. 2.在某些系统上,命令行部分包含了命令的完整路径名称.不过有些系统却不是这样:命令行的部分会原封不动地传递给被引用的程序. 3.别在选项之后放置任何空白,因为空白也会跟着选项一起传递给被引用的程序. 4.你需要知道解释其的完整路径名称.这可以用来规避可移植问题,因为不同的厂商可能将同样的东西放

shell脚本学习指南

以下八点不敢说就能成为你shell脚本学习指南de全部,至少可以让你编写出可靠的shell脚本. 1. 指定bash shell 脚本的第一行,#!之后应该是什么? 如果拿这个问题去问别人,不同的人的回答可能各不相同.我见过/usr/bin/env bash,也见过/bin/bash,还有/usr/bin/bash,还有/bin/sh,还有/usr/bin/env sh.这算是编程界的“’茴’字四种写法”了. 在多数情况下,以上五种写法都是等价的.但是,写过程序的人都知道:“少数情况”里往往隐藏

《Linux命令行与shell脚本编程大全》 第四章

4.1 监测程序 1. ps  默认只显示运行在当前控制台下的属于当前用户的进程.  可以接很多选项,比如 -A表示所有进程  -e等. 2. ps -l  查看进程更多信息 UID:启动这些进程的用户 PID:进程的进程ID PPID:父进程的进程ID C:进程生命周期中的CPU利用率 TTY:进程启动时的终端设备 TIME:运行进程需要的累计CPU时间 CMD:启动的程序名称 PRI:进程的优先级(数字越大代表越低的优先级) ADDR:进程的内存地址 F:内核分配给进程的系统标记 S:进程的

Shell脚本学习指南摘录---1

1.数字与数值表达式 awk并没有提供字符串转数字的函数,不过awk的做法很简单:只要加个零到字符串里边,例如s = "123",接着n = 0 + s,便将数字123赋给n了. 2.打印前几行的方式 head -n n filename # head -n 3 passwd head -n filename # head -3 passwd awk 'FNR <= n' filename # awk 'FNR <= 3' passwd sed -e nq filename

Shell脚本学习一:shell三种引号学习

一.Shell中变量的声明和引用 [[email protected] ~]# var1=Hello [[email protected] ~]# echo $var1 Hello [[email protected] ~]# echo ${var1}World HelloWorld 在Shell中,变量的引用使用$. 上面的代码中,$var1就是对变量var1的引用,输出的结果是Hello. 如果想链接其他字符,将变量放到大括号{}里面,然后在后面跟上其他内容. 例如上面的代码中:${var1

APUE学习笔记:第四章 文件和目录

4.1 引言 本章将描述文件的特征和文件的性质 4.2 stat.fstat和lstat函数 #include<sys/stat.h> int stat(const char *restrict pathname,struct stat *restrict buf); int fstat(int filedes,struct stat *buf) int lstat(const char *restrict pathname,struct stat *restrict buf); 三个函数的返

20145320《Java程序设计》第3周学习总结(第四章)

20145320<Java程序设计>第3周学习总结(第四章) 教材学习内容总结 对象(Object):存在的具体实体,具有明确的状态和行为 类(Class):具有相同属性和行为的一组对象的集合,用于组合各个对象所共有操作和属性的一种机制 从类看对象:类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象 从对象看类:类的产生,是从少数实例,推广到大量相似实例的抽象化过程(abstraction) 类是对象的设计图,对象是类的实例,生成对象要先定义类 4.1 类与对象 定义类使用c

shell脚本学习与总结

shell脚本学习总结,东西很多,供初学者参考. shell脚本是区分大小写的. 2.Unix特殊字符有: ( ; $ ? & * () [] ` ' " + 使用其时要进行转义() 3.Shell的注释以#开头 4.函数的定义Function fuction_name(){ Command to execute} 调用时直接用function_name. 5.控制结构 1)If...then语句 If [ test_command ]    Then    Commandsfi2)If

shell脚本学习笔记系列--1

一.学好shell编程的知识储备 1.相关Linux系统命令应用: 2.Vi/vim 编辑器的熟练使用,相关客户端软件的设置: 3.基础的服务,系统服务ntp,crond,网络服务:nfs,rsync,inotify,sersync,ssh,lanmp等. 补充:清空日志的三种方法: 1)echo  " " > filename.log 2)>filename.log 3)cat  /dev/null > filename.log 注:工作中有的时候不能删除(日志)文