文本处理工具sed和awk

文本处理工具sed

sed处理文本时是以行为单位的,每处理完一行就立即打印出来,然后再处理下一行,直至全文处理结束。sed可做的编辑动作包括删除、查找替换、添加、插入、从其他文件中读入数据等。

sed命令使用的场景包括以下:

常规编辑器编辑困难的文本。

太过于庞大的文本,使用常规编辑器难以胜任(比如vi一个几百兆的文件)

有规律的修改文本,加快文本的处理速度

sed修改文件流的方式如下:sed [options] ‘command’ file

# ‘command’命令均为vi编辑器中的命令

# sed命令默认不修改原文件,如果希望保存修改后的文件则需要用重定向’>’

#使用-e参数和分号连接多编辑命令

例如:sed –e ‘s/this/That/g’ –e ‘s/line/LINE/g’ sed.txt或者sed ‘s/this/That/g’ ; ‘s/line/LINE/g’ sed.txt

删除

sed ‘1d’ sed.txt >save.txt #删除第一行

sed ‘1,3d’ sed.txt #删除1到3行

sed ‘1,$d’ sed.txt #删除1到最后一行

sed ‘$d’ sed.txt  #删除最后一行

sed ‘5!d’ sed.txt  #只保留第五行

sed ‘/Empty/d’ sed.txt #删除所有包含Empty的行

sed ‘/^$/d’ sed.txt #删除空行

查找替换

使用s命令可将查找到的匹配文本内容替换为新的文本。

sed ‘s/line/LINE/’ sed.txt  #将line替换为LINE,每行默认替换一个

sed ‘s/line/LINE/2’ sed.txt  #将line替换为LINE,每行默认替换两个

sed ‘s/line/LINE/g’ sed.txt  #将line替换为LINE,全部替换

sed ‘s/^this/That/’ sed.txt  #只替换开头的this为That

#命令中间不能有空格

字符转换

使用y命令可进行字符转换,其作用为将一系列字符逐个的变换为另外一系列字符,基本用法如下:

sed ‘y/OLD/NEW/’ file  #将全文中字母O替换为N,字母L替换为E,字母D替换为W.

插入文本

使用i或者a命令插入文本,其中i代表在匹配行之前插入,而a代表在匹配行之后插入.

sed ‘2 i Insert’ sed.txt  #在第二行之前插入文本

sed ‘2 a Insert’ sed.txt  #在第二行之后插入文本

sed ‘/Second/ i \Insert’  #在匹配行之前插入文本

读入文本

使用命令r可以从其他文件中读取文本,并插入匹配行之后.

sed ‘/^$/r  /etc/passwd’ sed.txt  #将/etc/passwd中的内容读取到sed.txt空行之后

打印

使用p命令可进行打印,这里使用sed命令时一定要加参数-n,表示不打印没关系的行。

例:sed –n ‘1p’ sed.txt  #只打印第一行

#sed实际处理了第二行,其他几行由于没有匹配所以并未真正处理。

再如:sed –n ‘s/the/THE/gp’ sed.txt #只打印实际处理过的行,简化了输出,第二行the全部转换为THE

写文件

sed本身默认并不改写原文件,而只是对缓冲区的文本做了修改并输出到屏幕。所以想保存文件,除了使用重定向或-i,还可以使用w命令将结果保存到外部指定文件。

例如:sed –n ‘1,2 w output’ sed.txt #这里没有任何的输出,因为输出被重定向到文件output

#将sed.txt文件中1,2行写入文件output中

sed脚本

将动作静态化的写到某个文件中,然后调用sed命令并使用-f参数指定该文件。

vi sed.rules

s/this/THAT/g

/^$/d

sed sed.rules sed.txt

高级替换

替换匹配行的下一行,使用n命令

例如:sed ‘/^${n;s/line/LINE/g}’ sed.txt

文本处理工具awk

awk是基于列的处理工具,它的工作方式是按行读取文本并视为一条记录,每条记录以字段分割成若干字段,然后输出各字段的值。awk认为文件都是结构化的,也就是说都是由单词和各种空白字符组成的,“空白字符”包括空格、tab、连续的空格和tab等。每个非空白的部分叫做域,从左到右依次是第一个域,第二个域。$1,$2表示第一域第二个域,$0表示全部域。

打印指定的域

#打印第一个和第四个列awk ‘{print $1,$4}’ awk.txt

#打印全部内容awk ‘{print $0}’ awk.txt

指定打印的分隔符

默认情况下awk是使用空白字符作为分隔符的,但是也可以通过-F参数指定分隔符来区分不同的域(类似于cut命令).

注意:必须得使用单引号不能使用双引号.

例如:awk –F’.’ ‘{print $1,$2}’ awk.txt

打印每行的列数内部变量NF参数

awk ‘{print NF}’ awk.txt#打印每行的列数,指定不同的分隔符会有不同结果

打印固定域

在NF前加上$符号,则代表最后一列,这样不管有多少列,只要使用$NF就能打印出最后一行。倒数第二行为$(NF-1)

例如:awk ‘{print $NF}’ awk.txtawk ‘{print $(NF-1)}’ awk.txt

截取字符串

使用substr函数对指定域截取字符串

substr(指定域,第一个开始字符的位置,第二个结束的位置)

#其中第二个结束的位置可以为空,这样默认输出到该域的最后一个字符

例如:cat awk.txt | awk ‘{print substr($1,6,2)}’#输出第一个域从第六个字符开始长度为2的字段

内部变量length

使用内部变量length可以确定字符串的长度

例如:cat awk.txt | awk ‘{print length}’

使用awk求列和

例如: cat awk.txt | awk ‘BEGIN{total=0}{total+=$3}’END{print total}’ #求年龄的和

cat awk.txt | awk ‘BEGIN{total=0}{total+=$3}END{print total/NR}’ #求年龄的平均值

NR为内部变量,表示已经读取的记录数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容