Linux基础知识:sed和awk入门以及vim常用操作


今天主要介绍Linux中两大文本编辑器的入门级用法:sedstream editor)和awk

先说说sedsedstream editor。是一种非交互式上下文编辑器,它对源文件没有破坏性,查询中不改动源文件(但可以实现此功能),sed通过限制条件对文本进行行读取,并将读取内容贮存在内存中,根据限制内容pattern将文本由选择性的输出。sed不仅仅能够根据pattern(样式)作为约束条件,它还支持脚本导入的约束条件,这样节省了可观的键入和随之而来的错误。

下面我们来看看sed的简单用法:

sed [option] /pattern/command file…

sed [option] adr1,adr2/command file…

sed [option] script file..

command:命令不支持像选项那样可以组合使用,所以每条命令在每个语句中只能出现一次。

p:显示出所有信息,在设定显示条件的情况下匹配内容会多显示一次。

d:删除匹配内容所在的行。

a\:在指定行后添加一行或多行。

i\:在指定行前添加一行或多行。(\后为添加内容)

s:查找替换 s/查找要替换的内容/新替换的字符串/ i不区分大小学 g 全局替换查找)

pattern支持正则表达式,与grep中的使用格式相同。

注意:在使用正则表达式时,一旦用到元字符,则该这个正则表达式必须加引号。

option

-n 取消默认显示输出 使显示匹配内容

-e 在一个sed语句中加入多个限制条件,每个均以-e开头

-f -f选项后可直接跟一个脚本,sed就以此脚本导入限制条件

-i sed中加入该选项,将把原来对内存的

eg

sed /关键字/  文件目录

[root@www.bkjia.com tmp]# sed -n /id/p /etc/inittab #若要其显示内容p命令必不可少,只显示匹配则需要-n选项

sed 地址1,地址2  文件目录 #地址信息包括:行号、字符串和正则表达式。

[root@www.bkjia.com tmp]# sed -n 2,5p /etc/inittab #显示2~5行的所有内容

[root@www.bkjia.com tmp]# sed -n /bug/,/bug/p /proc/cpuinfo #从带有bug字符串的第一行显示到最后一行

fdiv_bug  : no

hlt_bug           : no

f00f_bug : no

coma_bug      : no

[root@www.bkjia.com tmp]# sed -n '/^cache/p' /proc/cpuinfo #cache开头的行(正则表达式用到元字符必须加引号!)

[root@www.bkjia.com tmp]# sed  '/^processor/ a\#this is my cpu!' /proc/cpuinfo # a\命令故不能在出现p命令了,i\的命令与之相同。

processor       : 0

#this is my cpu!

vendor_id       : GenuineIntel

….

[root@www.bkjia.com tmp]# sed '1,$s/yes/YES!/g' /proc/cpuinfo 

# 查找范围1$表示1到最后一行,s/ 匹配并替换的内容 / 新替换字段 / g表示匹配行内全局替换。

[root@www.bkjia.com tmp]# sed  '/^[[:space:]]*#/d' /etc/inittab

#删除显示内容中以 0个或多个空白字符紧接#开头的行

 

下面说说awkawk不仅是linux也是任何环境中现有功能最强大的数据处理引擎之一,它不仅支持简单的查找命令而且支持创建简短的程序,这些程序可以实现数据排序、处理数据、输入计算以及生成报表。与其说他是一款数据处理程序倒不如说他是一种用于文件的编程语言工具。

awk的格式:awk的命令有模式pattern和操作action组成,模式pattern由两斜杠之间的正则表达式和一个或多个awk操作符组成;操作action由括在大括号内的一条或多条语句组成,语句之间用分号隔开。注意pattern中的正则表达式两端必须加/ /action的两端必须加{ }。具体格式如下:

[root@www.bkjia.com ~]# awk  'pattern{action}'  filename

awk的格式化输出:

print命令

awk默认将整个文本以换行符分成若干个record,将每record以空格分成了若干个field

每个field分别对应$1$2$3…$n,整个record1..n的总和为$0

并且用一下几个内置变量来定义:

FS:输入字段分隔符,默认为空格

RS:输入行分隔符,默认为换行符

OFS:输出字段分隔符,默认问空格

ORS:输出行分隔符,默认为换行符

NF:当前记录中的字段数

NR:当前的行数

BEGIN模式

BEGIN+操作块,awk必须在输入文件在进行任何处理之前执行BEGIN后的模块.

eg

[root@www.bkjia.com ~]# awk 'BEGIN{FS=":";OFS="-"}{print $1,$2}' /etc/passwd

#分析:输入文件在未执行任何操作之前,将FSOFS分别替换,然后输出被新分隔符分割的字段 1 2

END模式

END+操作块,此模式不匹配任何输入行,而是执行任何与之关联的操作。即awk在处理完成输出前执行END+操作块。

eg

[root@www.bkjia.com ~]# awk 'BEGIN{FS=":";OFS="-"}{print $1,$2}END{print "show complet!"}' /etc/passwd

#在输出结果后加入字符串show complet!

[root@www.bkjia.com ~]# awk 'BEGIN{FS=":";OFS="-"}{print NR":"$1,$2}END{print "show complet!"}' /etc/passwd

1:root-x

2:bin-x

3:daemon-x

4:adm-x

5:lp-x

6:sync-x

7:shutdown-x

#此为print中加入NR的效果,显示了行号;并且还显示了额外字符串”: ”,print命令和C语言中的相同 输出变量时不需要家任何修饰符,输出文本内容则要加上” ”双引号。

  • 1
  • 2
  • 下一页

相关内容