使用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

时间: 2024-08-16 01:01:24

使用sed和awk进行文本处理的相关文章

一个利用sed和awk处理文本的小栗子

这两天做<Linux操作系统>课程的作业,碰到了一个题目,感觉很有意思,很考验对awk掌握的熟练度,故特意拿来分享. 首先说题目是这样的,有这样一段文本: RECORD #这是多余的注释行one #record_type students #这是多余的注释行two F sno 11111110000 F name 王铁蛋 F gender 男 F age 20 F class 网络工程01 F region 湖北省武汉市 . RECORD #这是多余的注释行one #record_type s

shell之三大文本处理工具grep、sed及awk

grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更强大而已,且已独立成一种语言来介绍. grep:文本过滤器,如果仅仅是过滤文本,可使用grep,其效率要比其他的高很多: sed:Stream EDitor,流编辑器,默认只处理模式空间,不处理原数据,如果你处理的数据是针对行进行处理的,可以使用sed: awk:报告生成器,格式化以后显示.如果对处

三大文本处理工具grep、sed及awk的简单介绍

grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更强大而已,且已独立成一种语言来介绍. grep:文本过滤器,如果仅仅是过滤文本,可使用grep,其效率要比其他的高很多: sed:Stream EDitor,流编辑器,默认只处理模式空间,不处理原数据,如果你处理的数据是针对行进行处理的,可以使用sed: awk:报告生成器,格式化以后显示.如果对处

9-13 文本处理工具sed及awk的用法

文本编辑三剑客:grep, sed, awk    grep: 文本搜索工具:egrep, fgrep    sed: stream editor, 流编辑器:    awk(gawk):文本格式化工具,报告生成器 sed命令: 基本正则表达式的元字符:     字符匹配:            .: 匹配任意单个字符:            []:匹配指定范围内的任意单个字符:            [^]:匹配指定范围内的任意单个字符: [:lower:]:所有小写字母 [:upper:]:

Linux文本三剑客超详细教程---grep、sed、awk

awk.grep.sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理. 1.grep 1.1 什么是grep和egrep Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来(匹配到的标红).grep全称是Global

文本三剑客(grep、sed、awk)

文档:文本三剑客(grep.sed.awk).note链接:http://note.youdao.com/noteshare?id=d6b2cb636b40803cf543f3f0b44bed9f&sub=1D4DA6B89EC74E9597672AADF0CE3894 原文地址:https://blog.51cto.com/12928116/2407036

sed和awk之awk篇

(原创文章,谢绝转载~) awk是处理文本的另一利器,也是对文本逐行处理.awk的基本syntax是: awk 'pattern {action} ' inputfile #examples awk '/regex/ { print $0 }' inputfile 在awk中用 $1,$2,$3.... 表示每行的第1,2,3....列,而 $0 表示整行数据 另有内置变量,借助awk的这些内置变量,可以非常方便的处理文本: NF ,列数(Number of Fileds),进而 $NF 为最后

日志分析查看——grep,sed,sort,awk运用

概述 我们日常应用中都离不开日志.可以说日志是我们在排查问题的一个重要依据.但是日志并不是写了就好了,当你想查看日志的时候,你会发现线上日志堆积的长度已经超越了你一行行浏览的耐性的极限了.于是,很有必要通过一些手段来高效地辅助你来快速的从日志中找到你要找的问题.本文通过一个从项目中衍生出来的例子从查找日志,筛选日志和统计日志3个方面层层递进来简述日志文件查看中一些有用的手段.(注:在linux环境下) 目录 0.查找关键日志grep 1.查找关键日志grep 2.精简日志内容 sed 3.对记录

Linux sed 和 awk的用法

sed用法: 原文链接:http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为:         sed [-nefri] 'command' 输入文本 常用选项:        -n∶使用安静(silent)模式.在一般 sed 的用法中,所有来自