`

Shell学习(9)sed和awk

阅读更多

sed和awk

 

背景 

设计script时,有时候需要修改脚步,如删除或置换某些关键词。这种在script执行过程动态修改文件的做法,称为流编辑。具有流编辑能力的工具,称为流编辑器(stream editor)。sed是这方面的佼佼者,可补bash的不足。另外,script执行时可能要制作报表,呈现各种字段信息。传统上,能和bash完美搭配的,非awk莫属。

正则表达式 

正则表达式是组成“样式”的基本语法,而“样式”是运用sed和awk必备的能力。sed和awk相同的运行方式是:只要符合“样式”的数据行,就对它执行指定的“操作”。

有关正则表达式的文章很多。可参见:http://www.cnblogs.com/KissKnife/archive/2008/03/23/1118423.html 

sed的用法 

sed是一种非交互式的流编辑器,可动态编辑文件。sed的工作模式是,比对每一数据行,若符合样式,就执行指定的操作。

语法

sed '样式命令' 文件

“样式”使用一对//含括,表示寻找之意;也可以指定数据行的范围。

sed并不会更改文件内容。sed的工作方式是读取文件内容,经流编辑之后,把结果显示到标准输出。因此,如果想要存储sed的处理结果,得自行运用转向输出将结果存成其他文件。

各种用法

1 删除某一段范围的数据行:sed '1,4d' datafl  把第1到4行数据删除,剩下的显示出来。d表示删除

2 把含有“样式”的数据行删除:sed '/La/d' datafl  把含有La的行删除,剩下的显示出来。//代表搜索

sed '/[0-9]\{3\}/d' datafl  把含有3位数的行删除,剩下的显示出来。。      正则表达式的应用

3 不含有“样式”的数据行删除:sed '/La/!d' datafl   把不含有La的行删除,剩下的显示出来

4 含有“样式”的数据行显示出来:sed '/La/p' datafl  把含有La的行显示出来。但sed默认也会把不符合的数据行显示出来,所以应这样用:sed -n '/La/p' datafl  -n会抑制sed显示

5 取代:sed -n 's/La/Oo/p' datafl s表示选取,第一对//中包括的字符串是搜索的目标,第二对//包括的是置换的字符串。它会把数据行中的La换成Oo    但这样只会更换第一个出现的La,若要全部置换,应使用:sed -n 's/La/Oo/gp' dafl

6 取用符合样式的字符串:sed -n 's/\(La\)/\1Oo/p' datafl  把找到的La存起来,用\1取回来再使用。执行的结果是,如数据行含有La,则第一个出现的La会置换成LaOo,然后显示这些含有La的数据行

7 找到符合样式的数据行后,再进行取代的操作:sed -n '/AAA/s/234/567/p' datafl 找到含AAA的那一行之后,将234换成567     sed -n '/AAA/,/DDD/s/B/567/p' datafl  将含有AAA到含有DDD的那几行,皆将其中的B换成567

例子 :

#!/bin/bash
if [ $# -ne 1 ] ; then
	echo "Usage: $0 on 或 $0 off"
	exit 1
fi
OPT=$1
case "$OPT" in
	[Oo][Nn]) CMD='YES';;
	[Oo][Ff][Ff]) CMD='NO';;
	*)
		echo '选项错误:使用on或off'
		exit 1;;
esac
VSFTP_conf='/etc/vsftpd.conf'
TMP_file="/tmp/tmp.$$"
if [ -e $VSFTP_conf ] ; then
	sed s/^.anonymous_enable=.*/anonymous_enable=$CMD/ $VSFTP_conf > $TMP_file
	mv -f $TMP_file $VSFTP_conf
	echo '设置成功'
else
	echo "文件:$VSFTP_conf  不存在"
fi

 

awk的用法

awk是一种可以处理数据,产生个时候报表的语言。工作方式是读取数据文件,将每一行数据视为一条记录,每笔记录以字段分割符分成若干字段,然后输出各个字段的值。

ps auxw | awk '{print $2}'

awk对每一条记录都会套用一个“样式{操作}”,如果符合样式,就执行指定的操作。样式或操作之一,可以省略。如果只有样式,表示要显示符合样式的数据行;如果只有操作,表示对每一数据行都执行该项操作。

以下是awk常用的作用格式:

awk “样式” 文件 :把符合样式的数据行显示出来

awk '{操作}' 文件 :对每一行都执行{}中的操作

awk '样式{操作}' 文件 :对符合样式的数据行,执行{}中的操作

awk的用法:

1 awk '/La/' datafl 显示含有La的数据行

2 awk '{print $1,$2}' datafl 显示datafl每一行的第1和第2个字段

3 awk '/La/{print $1,$2}' datafl  将含有关键词La的数据行的第1及第2个字段显示

4 awk -F: '/^ols3/{print $3,$4}' /etc/passwd 使用选项-F 指定:为分隔符,帐号ols3的uid及gid字段显示出来

5 awk -F: 'BEGIN{OFS="+++"}/^ols3/{print $1,$2,$3,$4,$5}' /etc/passwd 以:为分隔符,+++为输出字段分隔符,将帐号ols3的第1-5字段显示     BEGIN{}区域指定awk一开始先做初始化操作,设定OFS="+++"。变了OFS的作用是存储输出字段的分隔符。

 

分享到:
评论

相关推荐

    Linux主要shell命令、sed、awk使用详解

    Linux 主要shell命令、sed、awk使用详解 Linux 主要shell命令详解 ...总结来说,本章节主要讲述了 shell 的工作原理、shell 的种类、shell 的一般操作及 Bash 的特性,并对 sed 编辑器和 awk 使用进行了详细的讲解。

    Sed与awk第二版(中文高清版)

    3. 自动化脚本:在shell脚本中嵌入sed和awk命令,实现复杂的文本处理功能。 在学习Sed和awk时,读者需要注意,这些工具依赖于正则表达式进行文本匹配。因此,熟悉正则表达式的语法和使用方法对掌握sed和awk至关重要...

    shell编程,sed,awk,grep等教程整理

    本文将深入探讨shell编程,以及与之紧密相关的sed、awk和grep命令,这些都是Linux系统中进行文本处理和数据操作的重要工具。 首先,让我们了解什么是Shell编程。Shell是操作系统提供的一个接口,允许用户与系统内核...

    实战Shell脚本—sed,awk使用

    在学习和使用这两个工具时,理解正则表达式是非常重要的,因为它们是`sed`和`awk`进行模式匹配的基础。此外,熟悉基本的Shell语法,如重定向、管道和循环,也有助于更好地集成`sed`和`awk`到Shell脚本中。 总之,`...

    Sed与awk第二版(高清版)

    sed与awk使用指南 如果侵犯了您的权利,请您联系我。 本书介绍了一组名字奇特的 UNIX 实用工具 :sed 和 awk 。...sed 和 awk 的学习过程是很自然的,所以本书涵盖了上述 3 个程序,而重点集 中在 sed 和 awk 。

    sed和awk简明手册

    ### sed和awk简明手册知识点总结 #### 一、sed简介 - **基本概念**: - sed(stream editor)是一种非交互式的面向字符流的编辑器,它主要用于文本文件的处理,尤其适用于批量替换、删除、添加等操作。 - sed的...

    Sed与awk第三版(高清版)

    9. **学习资源**:《sed与awk》一书提供了深入浅出的讲解和实例,是学习这两个工具的优秀教材。书中涵盖了基础概念、高级技巧以及实战应用,适合初学者和进阶用户。 10. **社区和交流**:通过QQ群(如书中提到的...

    sed awk学习

    sed awk 学习笔记 SED 是一个“非交互式”的面向字符流的编辑器,它可以在一个地方指定所有的编辑指令,然后通过文件传递一次来执行他们。但是它在每次多于一行的处理能力方面有限制。SED 的优点是可以批量处理文件...

    shell中的精髓_sed_awk

    ### 关于Shell中的sed与awk #### 一、引言 在Unix及类Unix系统(如Linux)中,`sed` 和 `awk` 是两个极其强大的文本处理工具,被广泛应用于脚本编写、数据处理以及各种自动化任务中。本文旨在深入探讨这两个工具的...

    sed与awk(第二版)

    《sed与awk(第二版)》是一本深入探讨Linux/Unix系统中两个强大的文本处理工具——sed和awk的书籍。这两个工具在系统管理和自动化任务中起着至关重要的作用,尤其对于数据处理和文本操作有着无可比拟的优势。在本书中...

    grep,sed, awk 总结

    Linux系统中,文本处理是一项常见且重要的任务,grep、sed和awk是三个常用的文本处理工具,因其功能强大,被誉为Linux文本处理的"三剑客"。下面将详细总结这三个工具的使用方法和相关知识点。 ### grep grep是用于...

    Shell、awk、sed面试题汇总(无答案).doc

    Shell、awk、sed 面试题汇总 以下是从给定的文件中生成的相关知识点: Shell ...这些知识点涵盖了 Shell、awk 和 sed 命令的使用、变量赋值和取值、文件操作、权限设置、数据处理和统计等方面。

    sed_awk.chm

    This book is about a set of oddly named UNIX utilities, sed and awk. These utilities have many things in common, including the use of regular expressions for pattern matching. Since pattern matching ...

    Shell脚本专家指南.sed与awk第二版.shell十三问

    本文将深入探讨"Shell脚本专家指南"、"sed与awk第二版"以及"shell十三问"这三份文档所涵盖的重要知识点。 首先,"Shell脚本专家指南"详细介绍了如何编写高效且实用的Shell脚本。这包括了对Bash Shell的深入了解,如...

    Sed与awk 中文第二版

    sed和awk是用户、程序员和管理员应用的工具。之所以称为sed是因为它是一个流编辑器(stream editor),用于对许多文件执行一系列的编辑操作。awk是根据它的开发者aho、weinberger和kernighan命名的。awk是一种编程语言...

    awk&sed 详解

    awk&sed 详解 shell awk&sed 详解 shell awk&sed 详解 shell awk&sed 详解 shell awk&sed 详解 shell awk&sed 详解 shell

Global site tag (gtag.js) - Google Analytics