文档库 最新最全的文档下载
当前位置:文档库 › Sed手册

Sed手册

Sed手册
Sed手册

SED手册

中央研究院计算中心ASPAC计划(刘刚2008年5月7号整理ganghust@https://www.wendangku.net/doc/2d1554288.html,)

aspac@https://www.wendangku.net/doc/2d1554288.html,.tw技术报告:960051996年12月1日Version:1.0

SED手册 (1)

1.Introduction (2)

1.1何时使用sed (3)

1.2何处获得sed (3)

1.3sed能做那些编辑动作 (3)

1.4sed如何工作 (3)

2使用sed (4)

2.1.执行命令列上的编辑指令 (4)

2.2sed的编辑指令 (4)

2.3执行档案内的编辑指令 (6)

2.4执行多个文件檔的编辑 (6)

2.5.执行输出的控制 (7)

3.范例 (7)

3.1替换文件中的数据 (7)

3.2搬动文件中的数据 (8)

3.3删除文件中的数据 (9)

3.4搜寻文件中的数据 (9)

4介绍函数参数 (10)

4.1s (10)

4.2d (11)

4.3a (11)

4.4i (12)

4.5c (13)

4.6p (13)

4.7l (13)

4.8r (13)

4.9w (14)

4.10y (14)

4.11! (15)

4.12n (15)

4.13q (15)

4.14= (16)

4.15# (16)

4.16N (16)

4.17D (17)

4.18P (17)

4.19h (18)

4.20H (18)

4.21g (18)

4.22G (18)

4.23x (19)

4.24b、:label (19)

4.25t (20)

批注 (22)

1.Introduction

(Stream EDitor)为UNIX系统上提供将编辑工作自动化的编辑器,使用者无需直接编辑数据。使用者可利用sed 所提供20多种不同的函数参数,组合(批注[1])它们完成不同的编辑动作。此外,由于sed都以行为单位编辑文件,故其亦是行编辑器(line editor)。

sed是一个非交互式上下文(context)编辑器,它被设计在下列三种情况下发挥作用:

1)编辑那些对舒适的交互式编辑而言太大的文件。

2)在编辑命令太复杂而难于在交互模式下键入的时候编辑任何大小的文件。

3)要在对输入的一趟扫描中有效的进行多个‘全局’(global)编辑函数。

因为每次只把输入的某些行驻留在内存中,并且不使用临时文件,所以可编辑的文件的有效大小,只受限于输入和输出要同时共存于次级存储的要求。

可以单独的建立复杂的编辑脚本并作为给sed的命令文件。对于复杂的编辑,这节省了可观的键入和随之而来的错误。从命令文件运行sed高效于作者所知道的任何交互式编辑器,甚至包括能用预先写好的脚本驱动的编辑器。

相较于交互式编辑器而言,根本性的损失是缺乏相对地址(由于操作是每次一行的),和缺乏对命令如期运行的立即验证。

sed是UNIX编辑器ed的直系后代。由于在交互式和非交互式操作之间的差异,在ed和sed之间已经有了可观的变化;甚至ed的惯常用户都会经常感到惊讶(并可能气愤),如果他们没有阅读本文档的章节2和3,就草率的使用sed 的话。在两个编辑器之间最显著的家族性共同之处,在于他们所识别的模式(‘正则表达式’)的种类;匹配模式的代码可以从ed的代码几乎原封不动的复制过来,在章节2中对正则表达式的描述就是从UNIX Programmer’s Manual[1]几乎原封不动的复制过来的。(代码和描述都是Dennis M.Ritchie写的)。

一般sed最常用在编辑那些需要不断重复某些编辑动作的档上,例如将文件中的某个字符串替换成另一个字符串等等。这些相较于一般UNIX编辑器(交谈式的,如vi、emacs)用手动的方式修改檔,sed用起来较省力。下面几节将分别介绍:

何时使用sed

何处获得sed

能做那些编辑动作

sed如何工作

1.1何时使用

在修改檔时,如果不断地重复某些编辑动作,则可用sed自动一次执行这些编辑动作。例如要使received文件内1000封电子信件内的发信人属名"Tom"改成"John",此时只要在命令列上执行一简单的sed命令就可把檔内所有的"Tom"字符串替换成"John"。

再者,当檔需要许多不同编辑动作时,则sed一次可执行那些不同的编辑动作。例如sed能一次执行完将檔中所有空白行删除、替换字符串、并将使用者输入的文字添加在文件的第六行等等不同的编辑动作。

1.2何处获得sed

一般的UNIX系统,本身即附有sed。不同的UNIX系统所附的sed版本亦不尽相同。若读者所使用的UNIX系统上未附有sed,则可透过anonymous ftp到下列地方去取得:

https://www.wendangku.net/doc/2d1554288.html,.tw:/pub/GNU/gnu

https://www.wendangku.net/doc/2d1554288.html,.tw:/unix/gnu

https://www.wendangku.net/doc/2d1554288.html,.tw:/UNIX/gnu

https://www.wendangku.net/doc/2d1554288.html,.tw:/pub/Unix/GNU

https://www.wendangku.net/doc/2d1554288.html,.tw:/pub3/UNIX/gnu

https://www.wendangku.net/doc/2d1554288.html,.tw:/Packages/gnu

https://www.wendangku.net/doc/2d1554288.html,.tw:/pub2/gnu

https://www.wendangku.net/doc/2d1554288.html,.tw:/pub/unix/gnu

https://www.wendangku.net/doc/2d1554288.html,.tw:/pub1/UNIX/gnu

https://www.wendangku.net/doc/2d1554288.html,.tw:/pub/gnu

1.3sed能做那些编辑动作

sed可删除(delete)、改变(change)、添加(append)、插入(insert)、合并、交换文件中的数据行,或读入其它文件的数据到文件中,也可替换(substuite)它们其中的字符串、或转换(tranfer)其中的字母等等。例如将檔中的连续空白行删成一行、"local"字符串替换成"remote"、"t"字母转换成"T"、将第10行数据与第11数据合并等。

1.4sed如何工作

如同其它UNIX命令,sed由标准输入读入编辑文件并由标准输出送出结果。下图表示sed将资料行"Unix"替换成"UNIX",

在图中,上方standard input为标准输入,是读取数据之处;standard output为标准输出,是送出结果之处;中间

sed方块的下面两个虚线方块表示sed的工作流程。其中,左边虚线方块表示sed将标准输入数据置入pattern space,右边虚线方块表示sed将pattern space中编辑完毕后的数据送到标准输出。

在虚线方块中,两个实线方块分别表示pattern space与sed script。其中,pattern space为一缓冲区,它是sed工作场所;而sed script则表示一组执行的编辑指令。

在图中,左边虚线方块"Unix"由标准输入置入pattern space;接着,在右边虚线方块中,sed执行sed script中的编辑指令s/Unix/UNIX/(批注[2]),结果"Unix"被替换成"UNIX",之后,"UNIX"由pattern space送到标准输出。

总合上述所言,当sed由标准输入读入一行数据并放入pattern space时,sed依照sed script的编辑指令逐一对pattern space内的数据执行编辑,之后,再由pattern space内的结果送到标准输出,接着再将下一行数据读入。如此重复执行上述动作,直至读完所有数据行为止。

2使用sed

Sed命令列可分成编辑指令与文件文件部份。其中,编辑指令负责控制所有的编辑工作;檔檔表示所处理的档案。sed的编辑指令均由位址(address)与函数(function)两部份组成,其中,在执行时,sed利用它的地址参数来决定编辑的对象;而用它的函数参数(批注[3])编辑。

此外,sed编辑指令,除了可在命令列上执行,也可在档案内执行。其中差别只是在命令列上执行时,其前必须加上选项-e;而在档案(批注[4])内时,则只需在其文件名前加上选项-f。另外,sed执行编辑指令是依照它们在命令列上或檔内的次序。

下面各节,将介绍执行命令列上的编辑指令、sed编辑指令、执行档案内的编辑指令、执行多个档案的编辑、及执行sed输出控制。

2.1.执行命令列上的编辑指令

当编辑指令(参照[section2.2])在命令列上执行时,其前必须加上选项-e。其命令格式如下:

sed-e'编辑指令1'-e'编辑指令2'...文件檔

其中,所有编辑指令都紧接在选项-e之后,并置于两个"'"特殊字符间。另外,命令上编辑指令的执行是由左而右。

一般编辑指令不多时,使用者通常直接在命令上执行它们。例如,删除yel.dat内1至10行数据,并将其余文字中的"yellow"字符串改成"black"字符串。此时,可将编辑指令直接在命令上执行,其命令如下: sed-e'1,10d'-e's/yellow/black/g'yel.dat

在命令中,编辑指令'1,10d'(批注[5])执行删除1至10行数据;编辑指令's/yellow/black/g'(批注[6]),"yellow"字符串替换(substuite)成"black"字符串。

2.2sed的编辑指令

sed编辑指令的格式如下:

[address1[,address2]]function[argument]

其中,地址参数address1、address2为行数或regular expression字符串,表示所执行编辑的数据行;函数参数funct

ion[argument]为sed的内定函数,表示执行的编辑动作。

下面两小节,将仔细介绍地址参数的表示法与有哪些函数参数供选择。

2.2.1地址(address)参数的表示法

实际上,地址参数表示法只是将要编辑的数据行,用它们的行数或其中的字符串来代替表示它们。下面举几个例子说明(指令都以函数参数d(参照[section4.2])为例):

删除文件内第10行数据,则指令为10d。

删除含有"man"字符串的数据行时,则指令为/man/d。

删除档内第10行到第200行数据,则指令为10,200d。

删除档内第10行到含"man"字符串的数据行,则指令为10,/man/d。

接下来,以地址参数的内容与其个数两点,完整说明指令中位址参数的表示法(同样也以函数参数d为例)。

地址参数的内容:

地址为十进制数:此数字表示行数。当指令执行时,将对符合此行数的数据执行函数参数指示的编辑动作。例如,删除数据文件中的第15行数据,则指令为15d(参照[section4.2])。其余类推,如删除数据文件中的第m行数据,则指令为md。

地址为regular expression(参照[附录A]):

当数据行中有符合regular expression所表示的字符串时,则执行函数参数指示的编辑动作。另外,在regular expression前后必须加上"/"。例如指令为/t.*t/d,表示删除所有含两"t"字母的数据行。其中,"."表示任意字符;"*"表示其前字符可重复任意次,它们结合".*"表示两"t"字母间的任意字符串。

地址参数的个数:在指令中,当没有地址参数时,表示全部数据行执行函数参数所指示的编辑动作;当只有一地址参数时,表示只有符合地址的数据行才编辑;当有两个地址参数,如address1,address2时,表示对数据区执行编辑, address1代表起始数据行,address2代表结束资料行。对于上述内容,以下面例子做具体说明。

例如指令为

d

其表示删除文件内所有数据行。

例如指令为

5d

其表示删除文件内第五行资料。

例如指令为

1,/apple/d

其表示删除资料区,由檔内第一行至内有"apple"字符串的数据行。

例如指令为

/apple/,/orange/d

其表示删除资料区,由檔内含有"apple"字符串至含有"orange"字符串的数据行

2.2.2有那些函数(function)参数

下页表仲介绍所有sed的函数参数(参照[chapter4])的功能。

函数参数功能

:label建立script file内指令互相参考的位置。

#建立批注

{}集合有相同位址参数的指令。

!不执行函数参数。

=印出资料行数(line number)。

a\添加使用者输入的数据。

b label将执行的指令跳至由:建立的参考位置。

c\以使用者输入的数据取代数据。

d删除数据。

D删除pattern space内第一个newline字母\前的数据。

g拷贝数据从hold space。

G添加资料从hold space至pattern space。

h拷贝数据从pattern space至hold space。

H添加资料从pattern space至hold space。

l印出l资料中的nonprinting character用ASCII码。

i\插入添加使用者输入的数据行。

n读入下一笔资料。

N添加下一笔资料到pattern space。

p印出资料。

P印出pattern space内第一个newline字母\前的数据。

q跳出sed编辑。

r读入它檔内容。

s替换字符串。

t label先执行一替换的编辑指令,如果替换成牛p>;则将编辑指令跳至:label处执行。

w写资料到它文件内。

x交换hold space与pattern space内容。

y转换(transform)字符。

虽然,sed只有上表所述几个拥有基本编辑功能的函数,但由指令中位址参数和指令与指令间的配合,也能使sed完成大部份的编辑任务。

2.3执行档案内的编辑指令

当执行的指令太多,在命令列上撰写起来十分混乱,此时,可将这些指令整理储存在档案(譬如檔名为script_file)内,用选项-f script_file,则让sed执行script_file内的编辑指令。其命令的格示如下:

sed-f script_file文件檔

其中,执行script_file内编辑指令的顺序是由上而下。例如上一节的例子,其可改成如下命令: sed-f ysb.scr yel.dat

其中,ysb.scr檔的内容如下:

1,10d

s/yellow/black/g

另外,在命令列上可混合使用选项-e与-f,sed执行指令顺序依然是由命令列的左到右,如执行至-f后档案内的指令,则由上而下执行。

2.4执行多个文件檔的编辑

在sed命令列上,一次可执行编辑多个檔檔,它们跟在编辑指令之后。例如,替换white.dat、red.dat、black.dat文件内的"yellow"字符串成"blue",其命令如下:

sed-e's/yellow/blue/g'white.dat red.dat black.dat

上述命令执行时,sed依white.dat、red.dat、black.dat顺序,执行编辑指令s/yellow/blue/(请参照[section4.1],进行字符串的替换。

2.5.执行输出的控制

在命令列上的选项-n(批注[7])表示输出由编辑指令控制。由前章内容得知,sed会"自动的"将数据由pattern space输送到标准输出檔。但借着选项-n,可将sed这"自动的"的动作改成"被动的"由它所执行的编辑指令(批注[8])来决定结果是否输出。

由上述可知,选项-n必须与编辑指令一起配合,否则无法获得结果。例如,印出white.dat文件内含有"white"字符串的数据行,其命令如下:

sed-n-e'/white/p'white.dat

上面命令中,选项-n与编辑指令/white/p(参照[section4.6])一起配合控制输出。其中,选项-n将输出控制权移给编辑指令;/white/p将数据行中含有"white"字符串印出屏幕。

3.范例

一般在实际使用编辑器的过程中,常需要执行替换文件中的字符串、搬移、删除、与搜寻数据行等等动作。当然,一般交谈式编辑器(如vi、emacs)都能做得到上述功能,但文件一旦有大量上述编辑需求时,则用它们编辑十分没有效率。本章将用举例的方式说明如何用sed自动执行这些编辑功能。此外,在本章范例中,均以下述方式描述檔的需求:将文件中...数据,执行...(动作)

如此,目的是为了能将它们迅速的转成编辑指令。其中,"...数据"部份,转成指令中的位址参数表示;"执行...动作"部份,则转成函数参数表示。另外,当"执行...动作"要由数个函数参数表示时,则可利用"{"与"}"集合这些函数参数(批注[9]),其指令形式如下:

地址参数{

函数参数1

函数参数2

函数参数3

.

:

}

上述指令表示,将对符合地址参数的数据,依次执行函数参数1、函数参数2、函数参数3...表示的动作。下面各节,分别举例说明sed替换数据、移动、删除数据、及搜寻数据的命令。

3.1替换文件中的数据

Sed可替换文件中的字符串、数据行、甚至数据区。其中,表示替换字符串的指令中的函数参数为s(参照[section4.1]);表示替换数据行、或数据区的指令中的函数参数为c(参照[section4.5])。上述情况以下面三个例子说明。上述情况以下面三个例子说明。

例一.将文件中含"machine"字符串的数据行中的"phi"字符串,替换成为"beta"字符串。其命令列如下:

sed-e'/machine/s/phi/beta/g'input.dat(以后文件檔都以input.dat代表)

例二.将文件中第5行数据,替换成句子"Those who in quarrels interpose,must often wipe a bloody nose."。其命令列如下

sed-e'5c\

Those must often wipe a bloody nose.

'input.dat

例三.将文件中1至100行的资料区,替换成如下两行资料:

How are you?

data be deleted!

则其命令列如下

sed-e'1,100c\

How are you?\

data be deleted!

'input.dat

3.2搬动文件中的数据

使用者可用sed中的hold space暂存编辑中的数据、用函数参数w(参照[section4.9])将文件数据搬动到它文件内储存、或用函数参数r(参照[section4.8])将它檔内容搬到文件内。Hold space是sed用来暂存pattern space内数据的缓存器,当sed执行函数参数h、H(参照[section4.19])时,会将pattern space资料暂存到hold space;当执行函数参数x、g、G(参照[section4.22])时,会将暂存的资料取到pattern space。下面举三个例子说明。

例一.将文件中的前100数据,搬到文件中第300后输出。其命令列如下:

sed-f mov.scr文件檔

mov.scr檔的内容为

1,100{

H

d

}

300G

其中,

1,100{

H

d

}

它表示将文件中的前100数据,先储存(参照[section4.19])在hold space之后删除;指令300G(参照[section4.22])表示,将hold space内的资料,添加在文件中的第300数据后输出。

例二.将文件中含"phi"字符串的数据行,搬至mach.inf檔中储存。其命令列如下:

sed-e'/phi/w mach.inf'文件檔

例三.将mach.inf檔内容,搬至文件中含"beta"字符串的数据行。其命令列如下:

sed-e'/beta/r mach.inf'文件檔

另外,由于sed是一stream(参照[section1.4])编辑器,故理论上输出后的文件数据不可能再搬回来编辑。

3.3删除文件中的数据

因为sed是一行编辑器,所以sed很容易删除个别数据行或整个数据区。一般用函数参数d(参照[section4.2])或D(参照[section4.17])来表示。下面举两个例子说明。

将檔内所有空白行全部删除。其命令列为

sed-e'/^$/d'文件檔

regular expression(批注[附录A]),^$表示空白行。其中,^限制其后字符串必须在行首;$限制其前字符串必须在行尾。

将文件内连续的空白行,删除它们成为一行。其命令列为

sed-e'/^$/{

N

/^$/D

}'文件檔

其中,函数参数N(参照[section4.16])表示,将空白行的下一行资料添加至pattern space内。函数参数/^$/D表示,当添加的是空白行时,删除第一行空白行,而且剩下的空白行则再重新执行指令一次。指令重新执行一次,删除一行空白行,如此反复直至空白行后添加的为非空白行为止,故连续的空白行最后只剩一空白行被输出。

3.4搜寻文件中的数据

Sed可以执行类似UNIX命令grep的功能。理论上,可用regular expression(参照[附录A])。例如,将檔中含有"gamma"字符串的数据行输出。则其命令列如下:

sed-n-e'/gamma/p'文件檔

但是,sed是行编辑器,它的搜寻基本上是以一行为单位。因此,当一些字符串因换行而被拆成两部份时,一般的方法即不可行。此时,就必须以合并两行的方式来搜寻这些数据。其情况如下面例子:

例.将文件中含"omega"字符串的数据输出。其命令列如下

sed-f gp.scr文件檔

gp.scr檔的内容如下:

/omega/b

N

h

s/.*\n//

/omega/b

g

D

在上述sed script(批注[10]),因借着函数参数b形成类似C语言中的case statement结构,使得sed可分别处理当数据内含"omega"字符串;当"omega"字符串被拆成两行;以及数据内没有"omega"字符串的情况。接下来就依上述的三种情况,将sed script分成下面三部份来讨论。

当数据内含"omega",则执行编辑指令

/omega/b

它表示当资料内含"omega"字符串时,sed不用再对它执行后面的指令,而直接将它输出。

当数据内没有"omega",则执行编辑指令如下

N

h

s/.*\n//

/omega/b

其中,函数参数N(参照[section4.16]),它表示将下一行资料读入使得pattern space内含前后两行数据。函数参数h(参照[section4.19]),它表示将pattern space内的前后两行资料存入hold space。函数参数s/.*\n//,它表示将pattern space内的前后两行资料合并(批注[11])成一行。/omega/b,它表示如果合并后的数据内含"omega"字符串,则不用再执行它之后的指令,而将此数据自动输出;

当合并后的数据依旧不含"omega",则执行编辑指令如下

g

D

其中,函数参数g(参照[section4.21]),它表示将hold space内合并前的两行资料放回pattern space。函数参数D(参照[section4.17]),它表示删除两行资料中的第一行资料,并让剩下的那行数据,重新执行sed script。如此,无论的资料行内或行间的字符串才可搜寻完全。

4介绍函数参数

本章将以一节一个函数参数的方式,介绍所有sed提供的函数参数,其中有

|s|d|a|i|c|p|l|r|w|y|!|n|q|=|#|N|D|P|h|H|g|G|x|b|t|

另外,在各节中,首先简单介绍函数参数功能,接着说明函数参数与地址参数配合的格式,而其中也一并描述sed 执行此函数参数的工作情形。

4.1s

函数参数s表示替换(substitute)文件内字符串。其指令格式如下:

[address1[,address2]]s/pattern/replacemen/[flag]

对上述格式有下面几点说明:

函数参数s最多与两个地址参数配合。

关于"s/pattern/replacement/[flag]"(批注[12])有下面几点说明:

pattern:它为reguler expression字符串。它表示文件中要被替换的字符串。

replacement:它为一般字符串。但其内出现下列字符有特别意义:

&:代表其前pattern字符串。例如

sed-e's/test/&my car/'资料文件名

指令中,&代表pattern字符串"test"。故执行后,数据文件的"test"被替换成"test my car"。

\n:代表pattern中被第n个\(、\)(参照[附录A])所括起来的字符串。例如

sed-e's/\(test\)\(my\)\(car\)/[\2\3\1]/'资料文件名

指令中,\1表示"test"、\2表示"my"、\1表示"car"字符串。故执行后,数据文件的"test my car"被替换成"[my car test]"。

\:可用它来还原一些特殊符号(如上述的&与\)本身字面上的意义,或用它来代表换行。

flag:主要用它来控制一些替换情况:

当flag为g时,代表替换所有符合(match)的字符串。

当flag为十进制数m时,代表替换行内第m个符合的字符串。

当flag为p时,代表替换第一个符合pattern的字符串后,将数据输出标准输出文件。

当flag为w wfile时,代表替换第一个符合pattern的字符串后,输出到wfile檔内(如果wfile不存在,则会重新开启名为wfile的档案)。

当没有flag时,则将资料行内第一个符合pattern的字符串以replacement字符串来替换。

delimiter:在"/pattern/replace/[flag]"中"/"被当成一delimiter。除了空白(blank)、换行(newline)之外,使用者可用任何字符作为delimiter。例如下述编辑指令

s#/usr#/usr1#g

上述命令中\verb|#|为delimiter。如果用"/"做delimiter,则sed会将pattern与replacement中的"/"当成delimiter而发生错误。

范例:

题目:替换input.dat檔(后面如果没有特别指定,均假设檔檔名为input.dat)内"1996"字符串成"1997",同时将这些数据行存入year97.dat檔内。

说明:用函数参数s指示sed将"1996"字符串替换成"1997",另外用s argument中的flag w指示sed将替换过的资料行存入year97.dat檔内。

sed命令列:

sed-e's/1996/1997/w year97.dat'input.dat

4.2d

函数参数d表示删除数据行,其指令格式如下:

[address1[,address2]]d

对上述格式有下面几点说明:

函数参数d最多与两个地址参数配合。

sed执行删除动作情况如下:

将pattern space内符合地址参数的数据删除。

将下一笔资料读进pattern space。

重新执行sed script。

范例:可参考section3.3。

4.3a

函数参数a表示将资料添加到文件中。其指令格式如下:

[address1]a\使用者所输入的数据

对上述格式有下面几点说明:

函数参数a最多与一个地址参数配合。

函数参数a紧接着"\"字符用来表示此行结束,使用者所输入的数据必须从下一行输入。如果数据超过一行,则须在每行的结尾加入"\"。

sed执行添加动作情况如下:当pattern space内数据输出后,sed跟着输出使用者所输入的数据。

范例:

题目:添加"多任务操作系统"在含"UNIX"字符串的数据行后。假设input.dat檔的内容如下:

UNIX

说明:用函数参数a将所输入的数据添加在含"UNIX"字符串的数据行后。

sed命令列如下:

sed-e'/UNIX/a\

多任务操作系统

'input.dat

执行上述命令后,其输出结果如下:

UNIX

多任务操作系统

4.4i

函数参数i表示将资料插入文件中。其指令格式如下:

[address1]i\使用者所输入的数据

对上述格式有下面几点说明:

函数参数i最多与一个地址参数配合。

函数参数i紧接着"\"字符用来表示此行结束,使用者所输入的数据必须从下一行输入。如果数据超过一行,则须在每行的结尾加入"\"。

sed执行插入动作的情况如下:在pattern space内数据输出前,sed先输出使用者所输入的数据。

范例:

题目:将"文章版权属于中央研究院"插在input.dat檔中含"院长:李远哲"的数据行之前。假设input.dat檔内容如下:

院长:李远哲

说明:用函数参数i将数据行"文章版权属于中央研究院"插在含"院长:李远哲"的数据行之前。

sed命令列如下:

sed-e'/院长:李远哲/i\

文章版权属于中央研究院

'input.dat

执行上述命令后的输出如下:

文章版权属于中央研究院

院长:李远哲

4.5c

函数参数c表示改变文件中的数据。其格式如下:

[address1[,address2]]c\使用者所输入的数据

对上述格式有下面几点说明:

函数参数c最多与两个地址参数配合。

函数参数c紧接着"\"字符用来表示此行结束,使用者所输入的数据必须从下一行输入。如果数据超过一行,则须在每行的结尾加入"\"。

sed执行改变动作的情况:在pattern space内数据输出时,sed改变它成为使用者所输入的数据。

范例:参考section3.1之例二、三。

4.6p

函数参数p表示印出资料。其指令格式如下:

[address1[,address2]]p

对于上述格式有下面几点说明:

函数参数p最多与两个地址参数配合。

sed执行印出动作的情况如下:sed拷备一份pattern space内容至标准输出檔。

范例:参考section3.4开头的内容。

4.7l

函数参数l,除可将资料中的nonprinting character以ASCII码列出外,其于均与函数参数p相同。例如,将下面input.dat檔中的^[以ASCII码印出

The Great^[is a movie starring Steve McQueen.

执行命令sed-e'l'input.dat后,则输出结果如下:

The Great\003is a movie starring Steve McQueen.

The Great is a movie starring Steve McQueen.

上述第二行数据为sed的自动输出(请参照批注[]。

4.8r

函数参数r表示读入它档案内容到檔中。其指令格式如下:

[address1]r它檔名称

对于上述格式有下面几点说明:

函数参数r最多与一个地址参数配合。

在指令中,函数参数r与它檔名称间,只能有一空格。

sed执行读入动作的情况如下:在pattern space内数据输出后,sed读出它檔的内容跟着输出。当它檔不存在时,sed 照样执行其它指令而不会有任何错误讯息产生。

范例:参考section3.1之例三。

4.9w

函数参数w表示将檔中的写到它檔内。其指令格式如下:

[address1[,address2]]w它檔名称

对于上述格式有下面几点说明:

函数参数w最多与两个地址参数配合。

在指令中,函数参数w与它檔名称间,只能有一空格。

sed执行写出动作的情况如:将pattern space内资料写到它文件内。数据写入时,会取代(overwrite)原来档案内的数据。另外,当它檔不存在时,sed会重新产生(creat)它。

范例:参考section3.1之例二。

4.10y

函数参数y表示转换数据中的字符。其指令格式如下:

[address1[,address2]]y/xyz.../abc.../

对于上述格式有下面几点说明:

函数参数最多配合两个地址参数。

指令中,/abc.../xyz.../(x、y、z、a、b、c代表某些字符)为y的argument。其中abc...与xyz...的字符个数必须相同。sed执行转换时,将pattern space内数据内的a字符转换成x字符、b字符转换成y字符、c字符转换成z字符...。

范例:

题目:将input.dat文件中的小写字母改成大写。假设input.dat檔的内容如下:

Sodd's Second Law:

Sooner or later,the worst possible set of

circumstances is bound to occur.

说明:利用函数参数y指示sed做字母大小的转换。

sed命令列如下:

sed-e'

y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/

'input.dat

执行上述命令输出结果如下:

SODD'S SECOND LAW:

SOONER OR LATER,THE WORST POSSIBLE SET OF

CIRCUMSTANCES IS BOUND TO OCCUR.

4.11!

函数参数!表示不执行函数参数。当有如下指令时,

[address1[,address2]]!函数参数

表示,对符合地址参数之数据不执行函数参数。例如删除,除了含"1996"字符串,所有数据行,则执行如下命令sed-e'/1996/!d'input.dat

4.12n

函数参数n表示读入下一行资料。其指令格式如下:

[address1[,address2]]n

对上述格式有下面几点说明:

函数参数n最多配合两个地址参数。

sed执行读入下一行动作的情况如下:

输出在pattern space的数据。

将下一笔资料读到pattern space。

执行下一个编辑指令。

范例(可与[section4.18]中的范例比较):

题目:输出input.dat文件内偶数行资料。假设input.dat檔内容如下:

The

UNIX

Operation

System

说明:在命令列上

以选项-n,将数据输出的控制权(参照[section2.5])转给指令。

利用函数参数n将下一行数据(偶数行)取代pattern space内的资料行(奇数行)。

利用函数参数p将pattern space内的数据(偶数行)输出。

最后,整个输出只有原先文件内的偶数行数据。

sed命令列如下:

sed-n-e'n'-e'p'infro.dat

执行上述命令后,输出的结果如下:

UNIX

System

4.13q

函数参数q表示跳离sed。其指令格式如下:

[address1]q

对上述格式有下面几点说明:

函数参数q最多配合一个地址参数。

sed执行跳离动作时,它停止输入pattern space数据,同时停止数据送到标准输出文件。

范例:

题目:对文件文件执行script_file内的编辑指令,除非遇到"Linux"字符串。

说明:无论script_file内是何种指令,使用者只要在命令列上用指令/Linux/q,函数参数q会强迫sed遇到"Linux"时做跳离动作。

sed命令列如下:

sed-e'/Linux/q'-f script_file input.dat

4.14=

函数参数=表示印出资料的行数。其指令格式如下:

[address1,[address2]]=

对上述格式有下面几点说明:

函数参数=最多配合两个地址参数。

执行时,行数将在数据输出前先输出。

范例:

题目:印出input.dat文件内资料行数。假设input.dat的内容如下:

The UNIX

Operating System

说明:用函数参数=来印出资料的行数。

sed命令列如下:

sed-e'='input.dat

执行上述命令后,输出的结果如下:

1

The UNIX

2

Operating System

4.15#

在script file内,函数参数#后的文字为注解。当注解文字超过多行时,其行间须以"\"换行字符相隔。

4.16N

函数参数N表示添加下一笔资料在pattern space内。其指令格式如下:

[address1,[address2]]N

对上述格式有下面几点说明:

函数参数N最多配合两个地址参数。

sed执行时,将下一行数据读入并添加在pattern space内,数据行间以换行字符(embedded newline character)分隔。此外,在替换时,换行字符可用\n来match。

范例:

题目:将下述两行数据合并。假设input.dat的内容如下:

The UNIX

Operating System

说明:先利用函数参数N将两行数据置于pattern space内,在利用函数参数s/\n//将两行数据间的分隔号\n以空白替代,如此两行数据变成一行输出。

sed命令列如下:

sed-e'N'-e's/\n//'input.dat

执行上述命令后,其输出的结果如下:

The UNIX Operating System

4.17D

函数参数D表示删除pattern space内的第一行资料。其指令格式如下:

[address1,address2]D

对上述格式有下面几点说明:

函数参数D最多配合两个地址参数。

函数参数D与d的比较如下:

当pattern space内只有一数据行时,D与d作用相同。

当pattern space内有多行资料行时

D表示只删除pattern space内第一行资料;d则全删除。

D表示执行删除后,pattern space内不添加下一笔数据,而将剩下的数据重新执行sed script;d则读入下一行后执行sed script。

范例:参考section3.3的第二个例子。

4.18P

函数参数P表示印出pattern space内的第一行资料。其指令格式如下:

[address1,address2]P

对上述格式有下面几点说明:

函数参数P最多配合两个地址参数。

P与p,除了面对的pattern space内的数据行数不同外,其它均相同。

范例(可与[section4.12]中的范例):

题目:输出input.dat文件内奇数行资料。假设input.dat檔内容如下:

The

UNIX

System

说明:在命令列上

以选项-n,将数据输出的控制权(参照[section2.5])转给指令。

利用函数参数N将偶数行添加至pattern space内奇数行后。

利用函数参数P将pattern space内的第一行(奇数行)输出。

在奇数行输出后,pattern space内剩下的数据行(偶数行)则被放弃输出。最后,整个输出只有原先的奇数行数据。

sed命令列:

sed-n-e'N'-e'P'infro.dat

执行上述命令后,输出的结果如下:

The

System

4.19h

函数参数h表示暂存pattern space的资料至hold space。其指令格式如下:

[address1,[address2]]h

对上述格式有下面几点说明:

函数参数h最多配合两个地址参数。

sed执行暂存动作时,会盖掉(overwrite)hold space内原来的数据。

当sed全部执行结束时,hold space内数据会自动清除。

范例:参考section3.4的例子。

4.20H

函数参数H与h唯一差别是,sed执行h时,数据盖掉(overwrite)hold space内原来的数据,而H,数据则是"添加(append)"在hold space原来数据后。例题请参考section3.2之例一。

4.21g

函数参数g表示与函数参数h相反的动作,它表示将hold space内资料放回pattern space内。其指令格式如下: [address1,address2]g

函数参数g最多配合两个地址参数。

sed执行放回动作时,数据盖掉(overwrite)(批注[13])pattern space内原来的数据。

例题:参考section3.4的例子。

4.22G

函数参数G与g唯一差别是,sed执行g时,数据盖掉(overwrite)pattern space内原来的数据,而G,数据则是"添加(append)"在pattern space原来数据后。例子请参考section3.2例一。

4.23x

函数参数x表示交换hold space与pattern space内的数据。其指令格式如下:

[address1,[address2]]x

函数参数x大部份与其它处理hold space的函数参数一起配合。例如,将input.dat文件内第1行资料取代第3行资料。此时,用函数参数h与x来配合。其中,以函数参数h将第1资料存入hold space;当第3行数据出现在pattern space,以函数参数x交换hold space与pattern space的内容。如此,第3行资料就被第1资料替代。其命令列如下:

sed-e'1h'-e'3x'input.dat

4.24b、:label

函数参数:与函数参数b可在sed script内建立类似BASIC语言中GOTO指令的功能。其中,函数参数:建立标记;函数参数b将下一个执行的指令branch到标记处执行。函数参数:与b,在script file内配合的情况如下

.

.

.

编辑指令m1

:记号

编辑指令m2

.

.

.

[address1,[address2]]b[记号]

其中,当sed执行至指令[address1,[address2]]b[记号]时,如pattern space内的数据符合地址参数,则sed将下一个执行的位置branch至由:记号(批注[14])设定的标记处,也就是再由"编辑指令m2"...执行。另外,如果指令中函数参数b后没有记号,则sed将下一个执行的指令branch到script file的最后,利用此可使sed script内有类似C语言中的case statement结构。

范例:

题目:将input.dat文件内数据行的开头字母重复印40次。假设input.dat檔的内容如下:

A

B

C

说明:用指令b p1与:p1构成执行增加字母的循环(loop),同时在字母出现40个时,也用指令b来跳出循环。下面就以文件内第一行数据"A"为例,描述它如何连续多添加39个"A"在同一行:

用指令s/A/AA/(参照section4.1)将"A"替换成"AA"。

用指令b p1与:p1构成循环(loop),它目的使上述动作被反复的执行。每执行一次循环,则数据行上的"A"就多出一个。例如,第一次循环数据行变成"AA",第二次循环资料行变成"AAA"...。

用指令[ABC]\{40\}/b(批注[15])来作为停止循环的条件。当数据行有连续40个A出现时,函数参数b将执行的指令跳到最后,停止对此行的编辑。

同样,对其他数据行也如同上述的方式执行。

sed命令列如下:

sed-e'{

:p1

/A/s/A/AA/

/B/s/B/BB/

/C/s/C/CC/

/[ABC]\{40\}/b

b p1

}'input.dat

4.25t

基本上,函数参数t与函数参数b的功能类似,除了在执行t的branch前,会先去测试其前的替换指令有没有执行替换成功外。在script file内的情况如下:

.

.

.

编辑指令m1

:记号

编辑指令m2

.

.

.

s/.../.../

[address1,[address2]]t[记号]

编辑指令m3

其中,与函数参数b不同处在于,执行函数参数t branch时,会先检查其前一个替换指令成功与否。如成功,则执行branch;不成功,则不branch,而继续执行下一个编辑指令,例如上面的编辑指令m3。

范例:

题目:将input.dat文件中资料A1替换成C1、C1替换成B1、B1替换成A1。input.dat檔的内容如下:

代号

B1

A1

B1

C1

A1

C1

awk命令的用法

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。 awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是AWK 的GNU 版本。 awk其名称得自于它的创始人Alfred Aho 、Peter Weinberger 和Brian Kernighan 姓氏的首个字母。实际上AWK 的确拥有自己的语言:AWK 程序设计语言,三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。 使用方法 awk '{pattern + action}' {filenames} 尽管操作可能会很复杂,但语法总是这样,其中pattern 表示AWK 在数据中查找的内容,而action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。pattern就是要表示的正则表达式,用斜杠括起来。 awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。 通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。 调用awk 有三种方式调用awk 1.命令行方式 awk [-F field-separator] 'commands' input-file(s) 其中,commands 是真正awk命令,[-F域分隔符]是可选的。input-file(s) 是待处理的文件。在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。 2.shell脚本方式 将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。 相当于shell脚本首行的:#!/bin/sh 可以换成:#!/bin/awk 3.将所有的awk命令插入一个单独文件,然后调用: awk -f awk-script-file input-file(s) 其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。 本章重点介绍命令行方式。 入门实例 假设last -n 5的输出如下

批量替换命令(sed)

原文地址 https://www.wendangku.net/doc/2d1554288.html,/2009/10/unix -sed -tutorial-advanced-sed -substitutio n-examples/ 发现thegeekstuff 确实是个不错的网站,一周推送geek 教程,看了后受益颇深,特此分享此为不完整译文加上本人一些理解 1.Sed 替换分隔符 除了\外,其他的字符都可以当作Sed 的替换分隔符,如 @ % | ; : 首先创建一个输入文件path.txt 1 2 3 4 $ cat path.txt /usr/kbos/bin:/usr/local/bin:/usr/jbin:/usr/bin:/usr/sas/bin /usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin: /opt/omni/lbin :/opt/omni/sbin:/root/bin 示例一,指定@为替换分隔符,把/opt/omni/lbin 替换为/opt/tools/bin 1 2 3 4 $ sed 's@/opt/omni/lbin@/opt/tools/bin@g' path.txt /usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin:/usr/sas/bin /usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin: /opt/tools/bin :/opt/omni/sbin:/root/bin 示例二,如果指定/为分隔符,那么新旧字符串的/需要用\转义 1 2 3 4 $ sed 's/\/opt\/omni\/lbin/\/opt\/tools\/bin/g' path.txt /usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin:/usr/sas/bin /usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin: /opt/tools/bin :/opt/omni/sbin:/root/bin 2,使用 '&' 得到匹配的字符串 示例一,替换/usr/bin/为/usr/bin/local 1 2 3 4 $ sed 's@/usr/bin@&/local@g' path.txt /usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin/local :/usr/sas/bin /usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin/local :/opt/omni/bin: /opt/omni/lbin:/opt/omni/sbin:/root/bin 示例二,使用&匹配整行

Linux命令

tar grep find ssh sed awk vim diff sort export args ls pwd cd gzip bzip2unzip shutdown ftp crontab service ps free top df kill rm cp mv cat mount chmod chown passwd mkdir ifconfig uname whereis whatis locate man tail less su mysql yum rpm ping date wget 1. tar 创建一个新的tar文件 $ tar cvf archive_name.tar dirname/ 解压tar文件 $ tar xvf archive_name.tar 查看tar文件 $ tar tvf archive_name.tar 更多示例:The Ultimate Tar Command Tutorial with 10 Practical Examples 2. grep 在文件中查找字符串(不区分大小写) $ grep -i "the" demo_file 输出成功匹配的行,以及该行之后的三行 $ grep -A 3 -i "example" demo_text 在一个文件夹中递归查询包含指定字符串的文件

$ grep -r "ramesh" * 更多示例:Get a Grip on the Grep! – 15 Practical Grep Command Examples 3. find 查找指定文件名的文件(不区分大小写) $ find -iname "MyProgram.c" 对找到的文件执行某个命令 $ find -iname "MyProgram.c" -exec md5sum {} \; 查找home目录下的所有空文件 $ find ~ -empty 更多示例:Mommy, I found it! — 15 Practical Linux Find Command Examples 4. ssh 登录到远程主机 $ ssh -l jsmith https://www.wendangku.net/doc/2d1554288.html, 调试ssh客户端 $ ssh -v -l jsmith https://www.wendangku.net/doc/2d1554288.html, 显示ssh客户端版本

LINUX sed 使用

LINUX SED 1. Sed简介 2. 定址 3. Sed命令 4. 选项 5. 元字符集 6. 实例 7. 脚本 1. Sed简介 sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。以下介绍的是Gnu版本的Sed 3.02。 2. 定址 可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如1,3表示1,2,3行,美元符号($)表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定。 3. Sed命令 调用sed命令有两种形式: * sed [options] 'command' file(s) * sed [options] -f scriptfile file(s) a\ 在当前行后面加入一行文本。 b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。 c\ 用新的文本改变本行的文本。 d 从模板块(Pattern space)位置删除行。 D 删除模板块的第一行。 i\ 在当前行上面插入文本。 h 拷贝模板块的内容到内存中的缓冲区。 H 追加模板块的内容到内存中的缓冲区 g

获得内存缓冲区的内容,并替代当前模板块中的文本。 G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。 l 列表不能打印字符的清单。 n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。 N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。 p 打印模板块的行。 P(大写) 打印模板块的第一行。 q 退出Sed。 r file 从file中读行。 t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。 T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。 w file 写并追加模板块到file末尾。 W file 写并追加模板块的第一行到file末尾。 ! 表示后面的命令对所有没有被选定的行发生作用。 s/re/string 用string替换正则表达式re。 = 打印当前行号码。 # 把注释扩展到下一个换行符以前。 以下的是替换标记 * g表示行内全面替换。 * p表示打印行。 * w表示把行写入一个文件。 * x表示互换模板块中的文本和缓冲区中的文本。

sed替换命令

sed替换 让我们看一下 sed 最有用的命令之一,替换命令。使用该命令,可以将特定字符串或匹配的规则表达式用另一个字符串替换。下面是该命令最基本用法的示例: Linux代码 1.$ sed -e 's/foo/bar/' myfile.txt 上面的命令将 myfile.txt 中每行第一次出现的 'foo'(如果有的话)用字符串'bar' 替换,然后将该文件内容输出到标准输出。请注意,我说的是每行第一次出现,尽管这通常不是您想要的。在进行字符串替换时,通常想执行全局替换。也就是说,要替换每行中的所有出现,如下所示: Linux代码 1.$ sed -e 's/foo/bar/g' myfile.txt 在最后一个斜杠之后附加的 'g' 选项告诉 sed 执行全局替换。 关于 's///' 替换命令,还有其它几件要了解的事。首先,它是一个命令,并且只是一个命令,在所有上例中都没有指定地址。这意味着,'s///' 还可以与地址一起使用来控制要将命令应用到哪些行,如下所示: Linux代码 1.$ sed -e '1,10s/enchantment/entrapment/g' myfile 2.txt 上例将导致用短语 'entrapment' 替换所有出现的短语 'enchantment',但是只在第一到第十行(包括这两行)上这样做。 Linux代码 1.$ sed -e '/^$/,/^END/s/hills/mountains/g' myfile3.txt

该例将用 'mountains' 替换 'hills',但是,只从空行开始,到以三个字符 'END' 开始的行结束(包括这两行)的文本块上这样做。 关于 's///' 命令的另一个妙处是 '/' 分隔符有许多替换选项。如果正在执行字符串替换,并且规则表达式或替换字符串中有许多斜杠,则可以通过在 's' 之后指定一个不同的字符来更改分隔符。例如,下例将把所有出现的 /usr/local 替换成 /usr: Linux代码 1.$ sed -e 's:/usr/local:/usr:g' mylist.txt 在该例中,使用冒号作为分隔符。如果不指定分隔符,则变成了如下: Linux代码 1.$ sed -e 's/usr/local/usrg' mylist.txt 这样就不能执行了 如果需要在规则表达式中指定分隔符字符,可以在它前面加入反斜杠。 规则表达式混乱 目前为止,我们只执行了简单的字符串替换。虽然这很方便,但是我们还可以匹配规则表达式。例如,以下 sed 命令将匹配从 '<' 开始、到 '>' 结束、并且在其中包含任意数量字符的短语。下例将删除该短语(用空字符串替换): Linux代码 1.$ sed -e 's/<.*>//g' myfile.html 这是要从文件除去 HTML 标记的第一个很好的 sed 脚本尝试,但是由于规则表达式的特有规则,它不会很好地工作。原因何在?当 sed 试图在行中匹配规则表达式时,它要在行中查找最长的匹配。在我的前一篇 sed 文章中,这不成问题,因为我们使用的是 'd' 和 'p' 命令,这些命令总要删除或打印整行。但是,在使用 's///' 命令时,确实有很大不同,因为规则表达式匹配的整个部分将被

常用LINUX命令及脚本

常用LINUX命令及shell脚本 说明:本文档介绍的命令只说明比较有用的参数,要查看命令详情请‘MAN‘ 第一部分常用LINUX命令 (1) 1,基础命令 (1) 2,系统性能情况查看命令 (5) 3,网络命令 (6) 4,日志处理 (7) 5,其它命令 (9) 第二部分ftp命令说明 (9) 第三部分shell脚本 (10) 1批量创建目录 (10) 2,过滤出日志中昨天产生的线程挂起日志及详情代码 (11) 第一部分常用LINUX命令 1,基础命令 who 用于查看当前在线上的用户情况 参数: -m 显示当前用户名及详情 -q 显示用户的登陆帐号和登陆用户的数量 w 显示目前登入系统的用户信息 参数: -f 开启显示用户从何处登入系统 范例: was@linux-was:/tmp> w -f 00:55:11 up 48 min, 1 user, load average: 0.00, 0.02, 1.86 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT was pts/0 192.168.10.2 00:30 0.00s 0.84s 0.00s w –f JCPU指的是与该tty终端连接的所由进程占用的时间,不包括过去的后台作业时间;PCPU 指

的是当前进程(即w项中显示的)所占用的时间 id 查看显示目前登陆账户的uid和gid及所属分组及用户名 linux-was:~ # id uid=0(root) gid=0(root) groups=0(root) was@linux-was:/tmp> id uid=1000(was) gid=100(users) groups=16(dialout),33(video),100(users) hostname 显示当前主机名 ls 显示当前文件和目录 参数: -l 列出文件的详细信息 -a 列出目录下的所有文件,包括以 . 开头的隐含文件 -t 以时间排序 -r 对目录反向排序 -S 按文件大小排序 同时此命令也可查看文件或目录权限 pwd 查看”当前工作目录“的完整路径 当你在终端进行操作时,你都会有一个当前工作目录。 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置 参数: -P 输出物理路径,针对链接的参数 cd 进入特定的目录 参数: /指定目录进入指定的目录 .. 返回上一级目录 touch 创建文件 mkdir 创建目录 参数: -p 此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录

sed命令用法

sed命令行格式为: sed [-nefri] ‘command’输入文本/文件 常用选项: -n∶取消默认的输出,使用安静(silent)模式。在一般sed 的用法中,所有来自STDIN的资料一般都会被列出到屏幕上。但如果加上-n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来 -e∶进行多项编辑,即对输入行应用多条sed命令时使用. 直接在指令列模式上进行sed 的动作编辑 -f∶指定sed脚本的文件名. 直接将sed 的动作写在一个档案内,-f filename 则可以执行filename 内的sed 动作 -r∶sed 的动作支援的是延伸型正则表达式的语法。(预设是基础正则表达式语法) -i∶直接修改读取的文件内容,而不是由屏幕输出 常用命令: a ∶新增,a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行) c ∶取代,c 的后面可以接字串,这些字串可以取代n1,n2 之间的行 d ∶删除,因为是删除,所以d 后面通常不接任何内容 i ∶插入,i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行) p∶列印,亦即将某个选择的资料印出。通常p 会与参数sed -n 一起用 s∶取代,可以直接进行替换的工作。通常这个s 的动作可以搭配正则表达式。例如 1,20s/old/new/g 定址 定址用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。 地址是一个数字,则表示行号;是“$"符号,则表示最后一行。例如: sed -n '3p'datafile 只打印第三行 只显示指定行范围的文件内容,例如: # 只查看文件的第100行到第200行 sed -n '100,200p' mysql_slow_query.log 地址是逗号分隔的,那么需要处理的地址是这两行之间的范围(包括这两行在内)。范围可以用数字、正则表达式、或二者的组合表示。例如:

Linux命令集

文件和目录 cd /home 进入'/ home' 目录' cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd 进入个人的主目录 cd ~user1 进入个人的主目录 cd - 返回上次所在的目录 pwd 显示工作路径 ls 查看目录中的文件 ls -F 查看目录中的文件 ls -l 显示文件和目录的详细资料 ls -a 显示隐藏文件 ls *[0-9]* 显示包含数字的文件名和目录名 tree 显示文件和目录由根目录开始的树形结构(1) lstree 显示文件和目录由根目录开始的树形结构(2) mkdir dir1 创建一个叫做'dir1' 的目录' mkdir dir1 dir2 同时创建两个目录 mkdir -p /tmp/dir1/dir2 创建一个目录树 rm -f file1 删除一个叫做'file1' 的文件' rmdir dir1 删除一个叫做'dir1' 的目录' rm -rf dir1 删除一个叫做'dir1' 的目录并同时删除其内容rm -rf dir1 dir2 同时删除两个目录及它们的内容 mv dir1 new_dir 重命名/移动一个目录 cp file1 file2 复制一个文件 cp dir/* . 复制一个目录下的所有文件到当前工作目录 cp -a /tmp/dir1 . 复制一个目录到当前工作目录 cp -a dir1 dir2 复制一个目录 ln -s file1 lnk1 创建一个指向文件或目录的软链接

ln file1 lnk1 创建一个指向文件或目录的物理链接 touch -t 0712250000 file1 修改一个文件或目录的时间戳- (YYMMDDhhmm) file file1 outputs the mime type of the file as text iconv -l 列出已知的编码 iconv -f fromEncoding -t toEncoding inputFile > outputFile creates a new from the given input file by assuming it is encoded in fromEncoding and converting it to toEncoding. find . -maxdepth 1 -name *.jpg -print -exec convert "{}" -resize 80x60 "thumbs/{}" \; batch resize files in the current directory and send them to a thumbnails directory (requires convert from Imagemagick) 文件搜索 find / -name file1 从'/' 开始进入根文件系统搜索文件和目录 find / -user user1 搜索属于用户'user1' 的文件和目录 find /home/user1 -name \*.bin 在目录'/ home/user1' 中搜索带有'.bin' 结尾的文件 find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件 find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件 find / -name \*.rpm -exec chmod 755 '{}' \; 搜索以'.rpm' 结尾的文件并定义其权限 find / -xdev -name \*.rpm 搜索以'.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备 locate \*.ps 寻找以'.ps' 结尾的文件- 先运行'updatedb' 命令 whereis halt 显示一个二进制文件、源码或man的位置 which halt 显示一个二进制文件或可执行文件的完整路径

sed简单应用实例及详解

$ sed -n '/test/w file' example-----在example中所有包含test的行都被写入file里。 追加命令:a命令 * $ sed '/^test/a\\--->this is a example' example<-----'this is a example'被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠。 插入:i命令 $ sed '/test/i\\ new line -------------------------' example 如果test被匹配,则把反斜杠后面的文本插入到匹配行的前面。 下一个:n命令 * $ sed '/test/{ n; s/aa/bb/; }' example-----如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续。 变形:y命令 * $ sed '1,10y/abcde/ABCDE/' example-----把1--10行内所有abcde转变为大写,注意,正则表达式元字符不能使用这个命令。 退出:q命令 * $ sed '10q' example-----打印完第10行后,退出sed。 保持和获取:h命令和G命令 * $ sed -e '/test/h' -e '$G example-----在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一个称为保持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中的行的末尾。在这个例子中就是追加到最后一行。简单来说,任何包含test的行都被复制并追加到该文件的末尾。 保持和互换:h命令和x命令 * $ sed -e '/test/h' -e '/check/x' example -----互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换。 7. 脚本 Sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔,在命令的末尾不能有任何空白或文本,如果在一行中有多个命令,要用分号分隔。以#开头的行为注释行,且不能跨行。

西班牙语命令式变位和用法总结

西班牙语命令式变位和 用法总结 Modified by JACK on the afternoon of December 26, 2020

西语堂--西班牙语命令式变位和用法总结 一.肯定命令式变位和用法总结。 1.肯定命令式的变位。(命令式只有现在时态,没有第一人称“我”。)规则动词的变位。例如: verbo túusted nosotros vosotros ustedes cantar cant a cant e cant emos cant ad cant en comer com e com a com amos com ed com an vivir viv e viv a viv amos viv id viv an 常用不规则动词的变位。见下表: verbo túusted Nosotros vosotros ustedes ir ve vaya vayamos id vayan venir ven venga vengamos venid vengan

hacer haz haga hagamos haced hagan decir di diga digamos Decid digan salir sal salga salgamos salid salgan Oír oye oiga oigamos oíd oigan ser sésea seamos sed sean tener ten tenga tengamos tened tengan Poner pon ponga pongamos poned pongan 2. 肯定命令式使用时应注意的几点: 直接宾语代词和间接宾语代词都应直接连写在变位动词后面,顺序为间宾在 前,直宾在后,并且在变位动词重读音节加上重音符号。 例如: Dímelo . límpiatelas . llévenselo . póngaselos .

sed_4.2.1_man_中文

本文参照sed 4.2.1的man原文翻译。蓝色字体为man原文,黑色字体是我的译文。 水平有限,难免错漏,欢迎各位指正! GNU文档的精髓在info页,而不是man页。 当然更希望有同仁将sed的info页翻译出来,方便大家更扎实地运用好sed这个功能强大的工具。 翻译者:李启训。 NAME 名称 sed - stream editor for filtering and transforming text 用于过滤和转换文本的流编辑器。 SYNOPSIS 提要 sed [OPTION]... {script-only-if-no-other-script} [input-file]... DESCRIPTION 描述 Sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient. But it is sed's ability to filter text in a pipeline which particularly distinguishes it from other types of editors. Sed 是一个流编辑器。流编辑器用于转换输入流(文件或者来自管道)的基本文本。虽然在某些方面它类似于允许脚本编辑的编辑器(比如ed),但是sed只对一次传递的输入进行操作,当然更加高效。除此以外,因为sed能够过滤来自管道中的文本,这明显区别于其他类型的编辑器。 -n, --quiet, --silent suppress automatic printing of pattern space 抑制模式空间的自动输出。 -e script, --expression=script add the script to the commands to be executed 添加脚本给命令,以便执行。 -f script-file, --file=script-file add the contents of script-file to the commands to be executed 添加脚本文件的内容,以便执行。 --follow-symlinks follow symlinks when processing in place 就地处理时跟随符号链接。 -i[SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if extension supplied) 就地编辑文件(如果提供扩展,则备份文件)。 -l N, --line-length=N specify the desired line-wrap length for the `l' command 为l命令指定所预期的行的长度。 --posix disable all GNU extensions. 禁用所有GNU扩展。 -r, --regexp-extended use extended regular expressions in the script. 在脚本中使用扩展正则表达式。 -s, --separate consider files as separate rather than as a single continuous

西班牙语命令式变位和用法总结

西语堂--西班牙语命令式变位和用法总结 一.肯定命令式变位和用法总结。 1.肯定命令式的变位。(命令式只有现在时态,没有第一人称“我”。)规则动词的变位。例如: verbo túusted nosotros vosotros ustedes cantar cant a cant e cant emos cant ad cant en comer com e com a com amos com ed com an vivir viv e viv a viv amos viv id viv an 常用不规则动词的变位。见下表: verbo túusted Nosotros vosotros ustedes ir ve vaya vayamos id vayan venir ven venga vengamos venid vengan

hacer haz haga hagamos haced hagan decir di diga digamos Decid digan salir sal salga salgamos salid salgan Oír oye oiga oigamos oíd oigan ser sésea seamos sed sean tener ten tenga tengamos tened tengan Poner pon ponga pongamos poned pongan 2. 肯定命令式使用时应注意的几点: 直接宾语代词和间接宾语代词都应直接连写在变位动词后面,顺序为间宾在 前,直宾在后,并且在变位动词重读音节加上重音符号。 例如: Dímelo . límpiatelas . llévenselo . póngaselos .

linux sed命令参数及用法详解

sed sed 编辑器是 Linux 系统管理员的工具包中最有用的资产之一, 因此,有必要彻底地了解其应用 Linux 操作系统最大的一个好处是它带有各种各样的实用工具。存在如此之多不同的实用工具,几乎不可能知道并了解所有这些工具。可以简化关键情况下操作的一个实用工具是 sed。它是任何管理员的工具包中最强大的工具之一,并且可以证明它自己在关键情况下非常有价值。 sed 实用工具是一个“编辑器”,但它与其它大多数编辑器不同。除了不面向屏幕之外,它还是非交互式的。这意味着您必须将要对数据执行的命令插入到命令行或要处理的脚本中。当显示它时,请忘记您在使用 Microsoft Word 或其它大多数编辑器时拥有的交互式编辑文件功能。sed 在一个文件(或文件集)中非交互式、并且不加询问地接收一系列的命令并执行它们。因而,它流经文本就如同水流经溪流一样,因而 sed 恰当地代表了流编辑器。它可以用来将所有出现的 "Mr. Smyth" 修改为 "Mr. Smith",或将 "tiger cub" 修改为 "wolf cub"。流编辑器非常适合于执行重复的编辑,这种重复编辑如果由人工完成将花费大量的时间。其参数可能和一次性使用一个简单的操作所需的参数一样有限,或者和一个具有成千上万行要进行编辑修改的脚本文件一样复杂。sed 是 Linux 和UNIX 工具箱中最有用的工具之一,且使用的参数非常少。 sed 的工作方式 sed 实用工具按顺序逐行将文件读入到内存中。然后,它执行为该行指定的所有操作,并在完成请求的修改之后将该行放回到内存中,以将其转储至终端。完成了这一行上的所有操作之后,它读取文件的下一行,然后重复该过程直到它完成该文件。如同前面所提到的,默认输出是将每一行的内容输出到屏幕上。在这里,开始涉及到两个重要的因素—首先,输出可以被重定向到另一文件中,以保存变化;第二,源文件(默认地)保持不被修改。sed 默认读取整个文件并对其中的每一行进行修改。不过,可以按需要将操作限制在指定的行上。 该实用工具的语法为: sed [options] '{command}' [filename] 在这篇文章中,我们将浏览最常用的命令和选项,并演示它们如何工作,以及它们适于在何处使用。 替换命令 sed 实用工具以及其它任何类似的编辑器的最常用的命令之一是用一个值替换

linux Sed命令详解

linux sed命令详解 1. Sed简介 sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区 中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成 后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并 没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文 件的反复操作;编写转换程序等。以下介绍的是Gnu版本的Sed 3.02。 2. 定址 可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这 两行为起止的行的范围(包括行数表示的那两行)。如1,3表示1,2,3行,美元符号($) 表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定。 3. Sed命令 1)调用sed命令有两种形式: 2)sed [options] 'command' file(s) 3)sed [options] -f scriptfile file(s) 4)a\ 在当前行后面加入一行文本。 5)b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。 6)c\ 用新的文本改变本行的文本。 7)d 从模板块(Pattern space)位置删除行。 8)D 删除模板块的第一行。 9)i\ 在当前行上面插入文本。 10)h 拷贝模板块的内容到内存中的缓冲区。 11)H 追加模板块的内容到内存中的缓冲区

12)g 获得内存缓冲区的内容,并替代当前模板块中的文本。 13)G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。 14)l 列表不能打印字符的清单。 15)n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。 16)N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。 17)p 打印模板块的行。 18)P(大写)打印模板块的第一行。 19)q 退出Sed。 20)r file 从file中读行。 21)t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。 22)T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。 23)w file 写并追加模板块到file末尾。 24)W file 写并追加模板块的第一行到file末尾。 25)! 表示后面的命令对所有没有被选定的行发生作用。 26)s/re/string 用string替换正则表达式re。 27)= 打印当前行号码。 28)# 把注释扩展到下一个换行符以前。 以下的是替换标记 1)g表示行内全面替换。 2)p表示打印行。 3)w表示把行写入一个文件。 4)x表示互换模板块中的文本和缓冲区中的文本。

Linux中文本处理

Linux文本处理——sed、awk命令引入: 有一个例子:在服务器日志fresh.log中,找到所有报错的日期。$ sed -n `/Error/p` fresh.log | awk `{print $1}` Linux 三大利器: grep:查找一行指令,轻松搞定 sed:行编辑器 awk:文本处理工具 正则表达式》》》sed基本处理》》》awk更为复杂的处理 1.正则表达式 场景: 查找——查找所有包含‘Linux’的行 取出——取出以‘abc’开头的所有单词 匹配——匹配两位数、密码、qq号、身份证号等 正则表达式学习的方法: 1.单个字符表示 2.字符串表示 3.表达式 示例: 以cat /etc/passwd文档为例。 首先将这个文档拷贝到~/. 下 cp /etc/passwd ~/.

grep查找文件内容:grep+查找内容+文件/文档 grep ‘mooc’ passwd 正则表达式单字符 字符:1.特定字符2. 范围内字符3.任意字符 1.特定字符:某个具体的字符‘1’ ‘a’ grep ‘1’ passwd 2.范围内字符:单个字符[] 数字字符:[0-9], [259] grep ‘[0-9]’ passwd 小写字符:[a-z] 大写字符:[A-Z] 大小写字符:[a-zA-Z] 数字之外的字符:[a-zA-Z, :_/-().] 反向字符:^ 取反:[^0-9], [^0] 3.任意字符:. ‘[.]’ 指小数点。‘\.’ 指本来的意思,小数点。正则表达式其他符号: 边界字符:头尾字符 ^: ^root头字符注意与[^]的区别。 $ : flase$尾字符

sed命令使用

文本间隔: -------- # 在每一行后面增加一空行 sed G # 将原来的所有空行删除并在每一行后面增加一空行。 # 这样在输出的文本中每一行后面将有且只有一空行。 sed '/^$/d;G' # 在每一行后面增加两行空行 sed 'G;G' # 将第一个脚本所产生的所有空行删除(即删除所有偶数行) sed 'n;d' # 在匹配式样“regex”的行之前插入一空行 sed '/regex/{x;p;x;}' # 在匹配式样“regex”的行之后插入一空行 sed '/regex/G' # 在匹配式样“regex”的行之前和之后各插入一空行 sed '/regex/{x;p;x;G;}' 编号: -------- # 为文件中的每一行进行编号(简单的左对齐方式)。这里使用了“制表符” # (tab,见本文末尾关于'\t'的用法的描述)而不是空格来对齐边缘。 sed = filename | sed 'N;s/\n/\t/' # 对文件中的所有行编号(行号在左,文字右端对齐)。 sed = filename | sed 'N; s/^/ /; s/ *\(.\{6,\}\)\n/\1 /' # 对文件中的所有行编号,但只显示非空白行的行号。 sed '/./=' filename | sed '/./N; s/\n/ /' # 计算行数(模拟 "wc -l") sed -n '$=' 文本转换和替代: --------

# Unix环境:转换DOS的新行符(CR/LF)为Unix格式。 sed 's/.$//' # 假设所有行以CR/LF结束 sed 's/^M$//' # 在bash/tcsh中,将按Ctrl-M改为按Ctrl-V sed 's/\x0D$//' # ssed、gsed 3.02.80,及更高版本 # Unix环境:转换Unix的新行符(LF)为DOS格式。 sed "s/$/`echo -e \\\r`/" # 在ksh下所使用的命令 sed 's/$'"/`echo \\\r`/" # 在bash下所使用的命令 sed "s/$/`echo \\\r`/" # 在zsh下所使用的命令 sed 's/$/\r/' # gsed 3.02.80 及更高版本 # DOS环境:转换Unix新行符(LF)为DOS格式。 sed "s/$//" # 方法 1 sed -n p # 方法 2 # DOS环境:转换DOS新行符(CR/LF)为Unix格式。 # 下面的脚本只对UnxUtils sed 4.0.7 及更高版本有效。要识别UnxUtils版本的 # sed可以通过其特有的“--text”选项。你可以使用帮助选项(“--help”)看 # 其中有无一个“--text”项以此来判断所使用的是否是UnxUtils版本。其它DOS # 版本的的sed则无法进行这一转换。但可以用“tr”来实现这一转换。 sed "s/\r//" infile >outfile # UnxUtils sed v4.0.7 或更高版本 tr -d \r outfile # GNU tr 1.22 或更高版本 # 将每一行前导的“空白字符”(空格,制表符)删除 # 使之左对齐 sed 's/^[ \t]*//' # 见本文末尾关于'\t'用法的描述 # 将每一行拖尾的“空白字符”(空格,制表符)删除 sed 's/[ \t]*$//' # 见本文末尾关于'\t'用法的描述 # 将每一行中的前导和拖尾的空白字符删除 sed 's/^[ \t]*//;s/[ \t]*$//' # 在每一行开头处插入5个空格(使全文向右移动5个字符的位置) sed 's/^/ /' # 以79个字符为宽度,将所有文本右对齐 sed -e :a -e 's/^.\{1,78\}$/ &/;ta' # 78个字符外加最后的一个空格

相关文档