shell脚本之使用sed和awk进行文本处理
Shell这种脚本语言特点是,结果松散,场景复杂,针对于一些参数都有特殊意义。针对于大部分工程师而言,使用中的情况是你可能会经常忘记参数或其意义,使你不得不查阅man或网上寻求帮助。此篇文档作用就是在自己忘记个别参数的情况下有个一目了然的答案。
一、sed进行文本处理
Linux的sed工具是linux的流编辑器,用于处理文本文件,配合正则表达式使用,功能非常强大。以下是一些sed使用示例和解释:
|
# sed 's/oracle/CHAVIN/' textfile |
|
替换文本文件textfile中oracle为CHAVIN。脚本中的s表示替换字符的意思。 |
|
# sed -i 's/oracle/CHAVIN/' textfile |
|
-i参数意味着替换结果直接覆盖了源文件。 |
|
# sed 's/mysql/MYSQL/g' textfile # sed 's/mysql/MYSQL/2g' textfile # sed 's/mysql/MYSQL/3g' textfile |
|
默认情况sed会将每一行中第一处符合条件的字符替换掉,g代表替换当前行中匹配的所有的字符。如果想替换第n处,可以指定ng。 |
|
# sed 's:root:CHAVIN:' passwd # sed 's|root|CHAVIN|' passwd |
|
其中:、|和/一样都被用作界定符,效果相同。 |
|
# sed '/^$/d' textfile # sed '/mysql/d' textfile |
|
符号^$/d可以移除textfile中的空白行。 /mysql/d可以移除匹配包含字符mysql的行。 |
|
# sed 's/\b[0-9]\{3\}\b/NUMBERS/g' textrep |
|
匹配正则 \b[0-9]\{3\}\b 的选项被替换。 |
|
# echo this is an example | sed 's/\w\+/[&]/g' |
|
其中&号代表匹配的字符串内容。正则\w\+匹配单词。 |
|
# echo this is eigit 7 in a number | sed 's/eigit \([0-9]\)/\1/' |
|
替换\([0-9]\)匹配的字符串,第一个匹配的使用\1表示,第二个使用\2表示,依次类推。 |
|
# echo hello world | sed "s/$name/HELLO/" |
|
Sed可以使用双引号引用,使用双引号可以使用变量($name)的形式,单引号引用的不可以。 |
二、awk进行高级文本处理
使用awk的优势在于,它可以同时对行和列进行处理。awk脚本结构如下:
awk ‘BEGIN{ print “start” } patten { commonds } END{ print “end” }’ file
如上,awk脚本由3部分组成,BEGIN、END、带匹配选项的语句块可以随意省略。
Awk自带的一些重要功能:
l NR:记录数量,当前行号
l NF:当前行字段总数
l $0:当前行内容
l $1:当前行第一个字段内容
l $n:当前行第n个字段内容
l $NF:当前行最后一个字段内容
以下为常用用法示例及解释:
|
# echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7" | awk '{print "Line no:"NR",No of fields:"NF",$0="$0",$1="$1",$2="$2",$3="$3,"$NF="$NF}' |
|
测试NR、NF、$0、$1、$n、$NF |
|
# awk '{ print $3,$2 }' textfile |
|
打印第2行、第3行数据 |
|
# seq 5 | awk '{sum=sum+$1}END{print sum}' |
|
计算累加 |
|
# seq 5 | awk 'BEGIN{print "===================="} !/3/ { print $0 } END{print "===================="}' |
|
打印不包含3的行内容。 |
|
!/3/属于awk中字段过滤部分,常用的过滤方式如下: NR<5:行号小于5的行 NR==1,NR==5:行号在1~5之间 /linux/:包含linux的行 !/linux/:比包含linux的行 |
|
# var=1000 # echo | awk -v VARIABLE=$var '{ print VARIABLE }' |
|
使用参数“-v”将外部变量传递给awk |
|
# var1=1000 # var2=2000 # echo | awk '{print v1,v2}' v1=$var1 v2=$var2 |
|
将变量赋值放在awk语句块后边声明,可以同时传递多个值到awk中 |
|
# awk -F: '{ print $1,$2,$3,$4,$NF }' passwd |
|
使用参数“-F”设定字段分隔符,默认字段分隔符是空格,这里指定为“:”。 |
|
# echo | awk '{ for(i=1;i<10;i++){ print i } }' |
|
在awk中使用for循环。 |
|
# echo | awk -F: '{ "grep root /etc/passwd" | getline output;print output }' |
|
使用输出结果读入变量方式为output赋值,语法为【“command” | getline output】。 |
Awk内嵌函数参考文档:http://www.cnblogs.com/chengmo/archive/2010/10/08/1845913.html
shell脚本之使用sed和awk进行文本处理的更多相关文章
- 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式
正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...
- Pyp 替代sed,awk的文本处理工具
Linux上文本处理工具虽不少,像cut,tr,join,split,paste,sort,uniq,sed,awk这些经典工具让人眼花缭乱,而且都太老了,使用方法都不太人性化,尤其awk,语法简直反 ...
- Shell脚本学习之sed详解
在编写shell脚本的过程中,我们经常需要使用sed流编辑器和awk对文本文件进行处理. 一.什么是sed? sed 是一种在线编辑器,它一次处理一行内容.sed是非交互式的编辑器.它不会修改文件,除 ...
- shell基础 -- grep、sed、awk命令简介
在 shell 编程中,常需要处理文本,这里介绍几个文本处理命令. 一.grep 命令 grep 命令由来已久,用 grep 命令来查找 文本十分方便.在 POSIX 系统上,grep 可以在两种正则 ...
- Shell脚本的编写,sed的使用以及一些正则表达式
Shell脚本的简单编写以及sed的使用 标签(空格分隔): 博客文章 前一阵子为了批量修改Web审计规则,故编写了一个Shell脚本,顺便使用了下sed,顺便把正则表达式也重新学习一遍,感觉还是需要 ...
- shell脚本三剑客之sed
shell脚本之sed命令 1.概述 2.工作流程 3.命令格式 4.具体操作 1.概述: 1.sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流 2.sed编辑器 ...
- 一个利用sed和awk处理文本的小栗子
这两天做<Linux操作系统>课程的作业,碰到了一个题目,感觉很有意思,很考验对awk掌握的熟练度,故特意拿来分享. 首先说题目是这样的,有这样一段文本: RECORD #这是多余的注释行 ...
- LINUX系统下的shell命令---grep、sed、awk
1)grep文本过滤命令 1.grep基本认识 (Global search regular expression and print out the line全局搜索研究正则表达时并显示出 ...
- shell脚本学习(6)awk 编排字段
awk能取出文本字段重新编排 1 awk的用法 awk ‘program’ [file] 2 其中program 可以写成 ‘parrtern {action}’ pattern 或 actio ...
随机推荐
- SNF快速开发平台MVC-甘特图
上个月做了CS框架的甘特图样例,本月框架组人员又实现了BS的甘特图效果,而且效果也很不错哦 图形框可以直接拖拽调整时长时间: 新增节点:
- MongoDB 聚合操作(转)
在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复 ...
- MySQL设置全局sql日志
分别执行开启日志以及日志路径和日志文件名 SET GLOBAL general_log_file = '/var/lib/mysql/localhost.log';SET GLOBAL genera ...
- 第三部分:Android 应用程序接口指南---第二节:UI---第七章 通知
第7章 通知 一个通知是一条消息他是显示于你应用程序之外的一个界面中.当你告诉系统要发布一个通知时,它首先作为一个icon出现在通知区域.为了看见通知的细节,用户可以点击通知区域展开一个新的界面.下面 ...
- Atitit 提升进度的大原则与方法 高层方法 attilax总结
Atitit 提升进度的大原则与方法 高层方法 attilax总结 生产力的提升点 1.1. 管理,管理的发展发展非常缓慢,1 1.2. 方法论(前后分离,dsl等)1 1.3. 工具( 工具链 ...
- python修饰器(装饰器)以及wraps
Python装饰器(decorator)是在程序开发中经常使用到的功能,合理使用装饰器,能让我们的程序如虎添翼. 装饰器的引入 初期及问题的诞生 假如现在在一个公司,有A B C三个业务部门,还有S一 ...
- Android Launcher分析和修改8——AllAPP界面拖拽元素(PagedViewWithDraggableItems)
接着上一篇文章,继续分析AllAPP列表界面.上一篇文章分析了所有应用列表的界面构成以及如何通过配置文件修改属性.今天主要是分析PagedViewWithDraggableItems类,因为在我们分析 ...
- 【iCore1S 双核心板_FPGA】例程二:GPIO输入实验——识别按键输入
实验现象: iCore1s 双核心板上与FPGA相连的三色LED(PCB上标示为FPGA·LED),按键按下红灯点亮,松开按键红灯熄灭. 核心源代码: module KEY( input CLK_12 ...
- Eclipse 4.4(luna) 安装Veloeclipse 2.0.8时报错的问题
在Eclipse下编辑Velocity模板的插件,支持语法着色,代码向导等功能,简单好用,没有可视化编辑. Eclipse的更新地址是:http://veloeclipse.googlecode.co ...
- linux 修改文件类型
:Unix及类Unix系统里,每行结尾只有换行“\n”,Windows系统里面,每行结尾是换行+回车“\n\r”. 利用Linux下的vim编辑器,可以方便的在dos文件.unix文件之间进行切换,且 ...