Linux文本编辑命令 sed awk grep.docx

上传人:b****3 文档编号:10820190 上传时间:2023-05-27 格式:DOCX 页数:23 大小:33.22KB
下载 相关 举报
Linux文本编辑命令 sed awk grep.docx_第1页
第1页 / 共23页
Linux文本编辑命令 sed awk grep.docx_第2页
第2页 / 共23页
Linux文本编辑命令 sed awk grep.docx_第3页
第3页 / 共23页
Linux文本编辑命令 sed awk grep.docx_第4页
第4页 / 共23页
Linux文本编辑命令 sed awk grep.docx_第5页
第5页 / 共23页
Linux文本编辑命令 sed awk grep.docx_第6页
第6页 / 共23页
Linux文本编辑命令 sed awk grep.docx_第7页
第7页 / 共23页
Linux文本编辑命令 sed awk grep.docx_第8页
第8页 / 共23页
Linux文本编辑命令 sed awk grep.docx_第9页
第9页 / 共23页
Linux文本编辑命令 sed awk grep.docx_第10页
第10页 / 共23页
Linux文本编辑命令 sed awk grep.docx_第11页
第11页 / 共23页
Linux文本编辑命令 sed awk grep.docx_第12页
第12页 / 共23页
Linux文本编辑命令 sed awk grep.docx_第13页
第13页 / 共23页
Linux文本编辑命令 sed awk grep.docx_第14页
第14页 / 共23页
Linux文本编辑命令 sed awk grep.docx_第15页
第15页 / 共23页
Linux文本编辑命令 sed awk grep.docx_第16页
第16页 / 共23页
Linux文本编辑命令 sed awk grep.docx_第17页
第17页 / 共23页
Linux文本编辑命令 sed awk grep.docx_第18页
第18页 / 共23页
Linux文本编辑命令 sed awk grep.docx_第19页
第19页 / 共23页
Linux文本编辑命令 sed awk grep.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Linux文本编辑命令 sed awk grep.docx

《Linux文本编辑命令 sed awk grep.docx》由会员分享,可在线阅读,更多相关《Linux文本编辑命令 sed awk grep.docx(23页珍藏版)》请在冰点文库上搜索。

Linux文本编辑命令 sed awk grep.docx

Linux文本编辑命令sedawkgrep

Linux文本编辑命令sedawkgrep

分类:

LINUX

sed是一个精简的、非交互式的编辑器。

它能执行与编辑vi和emacs相同的编辑任务。

sed编辑器不提供交互使用方式:

只能在命令行输入编辑命令、指定文件名,然后在屏幕上察看输出。

sed编辑器没有破坏性。

它不会修改文件,除非用shell重定向来保存输出结果。

缺省情况下,所以的输出都被打印到屏幕上。

sed编辑器在shell脚本中很有用,因为在shell脚本中使用像vi或emacs这类交互式编辑器,要求脚本用户精通该编辑器,而且还会导致用户对打开的文件做出不需要的修改。

如果需要执行多项编辑任务,或是不想为shell命令行上的sed命令加引号,也可以把sed命令写在一个叫做sed脚本的文件里。

记住,在命令行输入命令时,shell会设法转换命令中所有的元字符或空白。

sed命令中凡是可能被shell解释的字符都必须加引号进行保护。

sed是一种在线编辑器,它一次处理一行内容。

处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。

接着处理下一行,这样不断重复,直到文件末尾。

文件内容并没有改变,除非你使用重定向存储输出。

Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

以下介绍的是Gnu版本的Sed3.02。

1.定址功能

可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。

如1,3表示1,2,3行,美元符号($)表示最后一行。

范围可以通过数据,正则表达式或者二者结合的方式确定。

2.sed命令调用格式

调用sed命令有两种形式:

*sed[options]'command'file(s)

*sed[options]-fscrīptfilefile(s)

a\在当前行后面加入一行文本。

blable分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。

c\用新的文本改变本行的文本。

d从模板块(Patternspace)位置删除行。

D删除模板块的第一行。

i\在当前行上面插入文本。

h拷贝模板块的内容到内存中的缓冲区。

H追加模板块的内容到内存中的缓冲区。

g获得内存缓冲区的内容,并替代当前模板块中的文本。

G获得内存缓冲区的内容,并追加到当前模板块文本的后面。

l列表不能打印字符的清单。

n读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。

N追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。

p打印模板块的行。

P(大写)打印模板块的第一行。

q退出Sed。

rfile从file中读行。

tlabelif分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。

Tlabel错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。

wfile写并追加模板块到file末尾。

Wfile写并追加模板块的第一行到file末尾。

!

表示后面的命令对所有没有被选定的行发生作用。

s/re/string用string替换正则表达式re。

=打印当前行号码。

*把注释扩展到下一个换行符以前。

以下的是替换标记

*    g表示行内全面替换。

*    p表示打印行。

*    w表示把行写入一个文件。

*    x表示互换模板块中的文本和缓冲区中的文本。

*    y表示把一个字符翻译为另外的字符(但是不用于正则表达式)

3.选项-ecommand,--expression=command

允许多台编辑。

-h,--help打印帮助,并显示bug列表的地址。

-n,--quiet,--silent取消默认输出。

-f,--filer=scrīpt-file引导sed脚本文件名。

-V,--version打印版本和版权信息。

4.元字符集

^锚定行的开始如:

/^sed/匹配所有以sed开头的行。

$锚定行的结束如:

/sed$/匹配所有以sed结尾的行。

.匹配一个非换行符的字符如:

/s.d/匹配s后接一个任意字符,然后是d。

*匹配零或多个字符如:

/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。

[]匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。

[^]匹配一个不在指定范围内的字符,如:

/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。

\(..\)保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。

&保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。

\<锚定单词的开始,如:

/\

\>锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行。

x\{m\}重复字符x,m次,如:

/0\{5\}/匹配包含5个o的行。

x\{m,\}重复字符x,至少m次,如:

/o\{5,\}/匹配至少有5个o的行。

x\{m,n\}重复字符x,至少m次,不多于n次,如:

/o\{5,10\}/匹配5--10个o的行。

5.实例

5.1删除:

d命令

*   $sed'2d'example-----删除example文件的第二行。

*   $sed'2,$d'example-----删除example文件的第二行到末尾所有行。

*   $sed'$d'example-----删除example文件的最后一行。

*   $sed'/test/'dexample-----删除example文件所有包含test的行。

5.2替换:

s命令

*   $sed's/test/mytest/g'example-----在整行范围内把test替换为mytest。

如果没有g标记,则只有每行第一个匹配的test被替换成mytest。

*   $sed-n's/^test/mytest/p'example-----(-n)选项和p标志一起使用表示只打印那些发生替换的行。

也就是说,如果某一行开头的test被替换成mytest,就打印它。

*   $sed's/^192.168.0.1/&localhost/'example-----&符号表示替换换字符串中被找到的部份。

所有以192.168.0.1开头的行都会被替换成它自已加localhost,变成192.168.0.1localhost。

*   $sed-n's/\(love\)able/\1rs/p'example-----love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。

*   $sed's#10#100#g'example-----不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。

表示把所有10替换成100。

5.3选定行的范围:

逗号

*   $sed-n'/test/,/check/p'example-----所有在模板test和check所确定的范围内的行都被打印。

*   $sed-n'5,/^test/p'example-----打印从第五行开始到第一个包含以test开始的行之间的所有行。

*   $sed'/test/,/check/s/$/sedtest/'example-----对于模板test和west之间的行,每行的末尾用字符串sedtest替换。

5.4多点编辑:

e命令

*   $sed-e'1,5d'-e's/test/check/'example-----(-e)选项允许在同一行里执行多条命令。

如例子所示,第一条命令删除1至5行,第二条命令用check替换test。

命令的执行顺序对结果有影响。

如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。

*   $sed--expression='s/test/check/'--expression='/love/d'example-----一个比-e更好的命令是--expression。

它能给sed表达式赋值。

5.5从文件读入:

r命令

*   $sed'/test/rfile'example-----file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面。

5.6写入文件:

w命令

*   $sed-n'/test/wfile'example-----在example中所有包含test的行都被写入file里。

5.7追加命令:

a命令

*   $sed'/^test/a\\--->thisisaexample'example<-----'thisisaexample'被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠。

5.8插入:

i命令

$sed'/test/i\\

newline

-------------------------'example

如果test被匹配,则把反斜杠后面的文本插入到匹配行的前面。

下一个:

n命令

*   $sed'/test/{n;s/aa/bb/;}'example-----如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续。

5.9变形:

y命令

*   $sed'1,10y/abcde/ABCDE/'example-----把1--10行内所有abcde转变为大写,注意,正则表达式元字符不能使用这个命令。

5.10退出:

q命令

*   $sed'10q'example-----打印完第10行后,退出sed。

5.11保持和获取:

h命令和G命令

*   $sed-e'/test/h'-e'$Gexample-----在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将打印在屏幕上。

接着模式空间被清空,并存入新的一行等待处理。

在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一个称为保持缓存区的特殊缓冲区内。

第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中的行的末尾。

在这个例子中就是追加到最后一行。

简单来说,任何包含test的行都被复制并追加到该文件的末尾。

5.12保持和互换:

h命令和x命令

*   $sed-e'/test/h'-e'/check/x'example-----互换模式空间和保持缓冲区的内容。

也就是把包含test与check的行互换。

6.脚本

Sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。

Sed对于脚本中输入的命令非常挑剔,在命令的末尾不能有任何空白或文本,如果在一行中有多个命令,要用分号分隔。

以#开头的行为注释行,且不能跨行。

7.小技巧

*   在sed的命令行中引用shell变量时要使用双引号,而不是通常所用的单引号。

下面是一个根据name变量的内容来删除named.conf文件中zone段的脚本:

name='zone\"localhost"'

sed"/$name/,/};/d"named.conf

awk

awk是一种程序语言,对文档资料的处理具有很强的功能。

awk名称是由它三个最初设计者的姓氏的第一个字母而命名的:

AlfredV.Aho、PeterJ.Weinberger、BrianW.Kernighan。

awk最初在1977年完成。

1985年发表了一个新版本的awk,它的功能比旧版本增强了不少。

awk能够用很短的程序对文档里的资料做修改、比较、提取、打印等处理。

如果使用C或Pascal等语言编写程序完成上述的任务会十分不方便而且很花费时间,所写的程序也会很大。

awk不仅仅是一个编程语言,它还是linux系统管理员和程序员的一个不可缺少的工具。

awk语言本身十分好学,易于掌握,并且特别的灵活。

gawk是GNU计划下所做的awk,gawk最初在1986年完成,之后不断地被改进、更新。

gawk包含awk的所有功能。

1.gawk的主要功能

gawk的主要功能是针对文件的每一行(line),也就是每一条记录,搜寻指定的格式。

当某一行符合指定的格式时,gawk就会在此行执行被指定的动作。

gawk依此方式自动处理输入文件的每一行直到输入文件档案结束。

gawk经常用在如下的几个方面:

·根据要求选择文件的某几行,几列或部分字段以供显示输出。

·分析文档中的某一个字出现的频率、位置等。

·根据某一个文档的信息准备格式化输出。

·以一个功能十分强大的方式过滤输出文档。

·根据文档中的数值进行计算。

2.如何执行gawk程序

基本上有两种方法可以执行gawk程序。

如果gawk程序很短,则可以将gawk直接写在命令行,如下所示:

gawk'program'input-file1input-file2...

其中program包括一些pattern和action。

如果gawk程序较长,较为方便的做法是将gawk程序存在一个文件中,

gawk的格式如下所示:

gawk-fprogram-fileinput-file1input-file2...

gawk程序的文件不止一个时,执行gawk的格式如下所示:

gawk-fprogram-file1-fprogram-file2...input-file1input-file2...

3.文件、记录和字段

一般情况下,gawk可以处理文件中的数值数据,但也可以处理字符串信息。

如果数据没有存储在文件中,可以通过管道命令和其他的重定向方法给gawk提供输入。

当然,gawk只能处理文本文件(ASCII码文件)。

电话号码本就是一个gawk可以处理的文件的简单例子。

电话号码本由很多条目组成,每一个条目都有同样的格式:

姓、名、地址、电话号码。

每一个条目都是按字母顺序排列。

在gawk中,每一个这样的条目叫做一个记录。

它是一个完整的数据的集合。

例如,电话号码本中的SmithJohn这个条目,包括他的地址和电话号码,就是一条记录。

记录中的每一项叫做一个字段。

在gawk中,字段是最基本的单位。

多个记录的集合组成了一个文件。

大多数情况下,字段之间由一个特殊的字符分开,像空格、TAB、分号等。

这些字符叫做字段分隔符。

请看下面这个/etc/passwd文件:

tparker;t36s62hs;501;101;TimParker;/home/tparker;/bin/bash

etreijs;2ys639dj3;502;101;EdTreijs;/home/etreijs;/bin/tcsh

ychow;1h27sj;503;101;YvonneChow;/home/ychow;/bin/bash

你可以看出/etc/passwd文件使用分号作为字段分隔符。

/etc/passwd文件中的每一行都包括七个字段:

用户名;口令;用户ID;工作组ID;注释;home目录;启始的外壳。

如果你想要查找第六个字段,只需数过五个分号即可。

但考虑到以下电话号码本的例子,你就会发现一些问题:

SmithJohn13WilsonSt.555-1283

SmithJohn2736ArtsideDrApt123555-2736

SmithJohn125WestmountCr555-1726

虽然我们能够分辨出每个记录包括四个字段,但gawk却无能为力。

电话号码本使用空格作为分隔符,所以gawk认为Smith是第一个字段,John是第二个字段,13是第三个字段,依次类推。

就gawk而言,如果用空格作为字段分隔符的话,则第一个记录有六个字段,而第二个记录有八个字段。

所以,我们必须找出一个更好的字段分隔符。

例如,像下面一样使用斜杠作为字段分隔符:

Smith/John/13WilsonSt./555-1283

Smith/John/2736ArtsideDr/Apt/123/555-2736

Smith/John/125WestmountCr/555-1726

如果你没有指定其他的字符作为字段分隔符,那么gawk将缺省地使用空格或TAB作为字段分隔符。

4.模式和动作

在gawk语言中每一个命令都由两部分组成:

一个模式(pattern)和一个相应的动作

(action)。

只要模式符合,gawk就会执行相应的动作。

其中模式部分用两个斜杠括起来,而动

作部分用一对花括号括起来。

例如:

/pattern1/{action1}

/pattern2/{action2}

/pattern3/{action3}

所有的gawk程序都是由这样的一对对的模式和动作组成的。

其中模式或动作都能够被省

略,但是两个不能同时被省略。

如果模式被省略,则对于作为输入的文件里面的每一行,动作

都会被执行。

如果动作被省略,则缺省的动作被执行,既显示出所有符合模式的输入行而不做

任何的改动。

下面是一个简单的例子,因为gawk程序很短,所以将gawk程序直接写在外壳命令行:

gawk'/tparker/'/etc/passwd

此程序在上面提到的/etc/passwd文件中寻找符合tparker模式的记录并显示(此例中没有动作,所以缺省的动作被执行)。

让我们再看一个例子:

gawk'/UNIX/{print$2}'file2.data

此命令将逐行查找file2.data文件中包含UNIX的记录,并打印这些记录的第二个字段。

你也可以在一个命令中使用多个模式和动作对,例如:

gawk'/scandal/{print$1}/rumor/{print$2}'gossip_file

此命令搜索文件gossip_file中包括scandal的记录,并打印第一个字段。

然后再从头搜索

gossip_file中包括rumor的记录,并打印第二个字段。

5.比较运算和数值运算

gawk有很多比较运算符,下面列出重要的几个:

==相等

!

=不相等

>大于

<小于

>=大于等于

<=小于等于

例如:

gawk'$4>100'testfile

将会显示文件testfile中那些第四个字段大于100的记录。

下表列出了gawk中基本的数值运算符。

运算符说明示例

+加法运算2+6

-减法运算6-3

*乘法运算2*5

/除法运算8/4

^乘方运算3^2(=9)

%求余数9%4(=1)

例如:

{print$3/2}

显示第三个字段被2除的结果。

在gawk中,运算符的优先权和一般的数学运算的优先权一样。

例如:

{print$1+$2*$3}

显示第二个字段和第三个字段相乘,然后和第一个字段相加的结果。

你也可以用括号改变优先次序。

例如:

{print($1+$2)*$3}

显示第一个字段和第二个字段相加,然后和第三个字段相乘的结果。

6.内部函数

gawk中有各种的内部函数,现在介绍如下:

6.1随机数和数学函数

sqrt(x)求x的平方根

sin(x)求x的正弦函数

cos(x)求x的余弦函数

atan2(x,y)求x/y的余切函数

log(x)求x的自然对数

exp(x)求x的e次方

int(x)求x的整数部分

rand()求0和1之间的随机数

srand(x)将x设置为rand()的种子数

6.2字符串的内部函数

·index(in,find)在字符串in中寻找字符串find第一次出现的地方,返回值是字符串

find出现在字符串in里面的位置。

如果在字符串in里面找不到字符串find,则返回值为0。

例如:

printindex("peanut","an")

显示结果3。

·length(string)求出string有几个字符。

例如:

length("abcde")

显示结果5。

·match(string,regexp)在字符串string中寻找符合regexp的最长、最靠左边的子字符串。

返回值是regexp在string的开始位置,即index值。

match函数将会设置系统变量

RSTART等于index的值,系统变量RLENGTH等于符合的字符个数。

如果不符合,则会

设置RSTART为0、RLENGTH为-1。

·sprintf(format,expression1,...)和printf类似,但是sprintf并不显示,而是返回字符串。

例如:

sprintf("pi=%.2f(approx.)",22/7)

返回的字符串为pi=3.14(approx.)

·sub(regexp,replacement,target)在字符串target中寻找符合regexp的最长、最靠左的

地方,以字串replacement代替最左边的regexp。

例如:

str="water,water,everywhere"

sub(/at/,"ith",str)

结果字符串str会变成wither,water,everywhere

·gsub(regexp,replacement,target)与前面的sub类似。

在字符串target中寻找符合regexp的所有地方,以字符串replacement代替所有的regexp。

例如:

str="water,water,everywhere"

gsub(/at/,"ith",str)

结果字符串str会变成wither,wither,everywhere

·substr(string,start,length)返回字符串string的子字符串,这个子字符串的长度为length,从第start个位置开始。

例如:

substr("washington",5,3)

返回值为ing

如果没有length,则返回的子字符串是从第start个位置开始至结束。

例如:

substr("washington",5)

返回值为ington。

·tolower(string)将字符串string的大写字母改为小写字母。

例如:

tolower(

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2