linux Sed命令详解

合集下载

Linux命令高级技巧使用sed进行模式匹配和替换

Linux命令高级技巧使用sed进行模式匹配和替换

Linux命令高级技巧使用sed进行模式匹配和替换Linux命令高级技巧:使用sed进行模式匹配和替换sed(stream editor)是Linux操作系统中一款十分强大的流式编辑器。

它可以实现对文本进行各种操作,包括模式匹配和替换。

本文将介绍sed命令的使用方法,帮助读者学习如何利用sed进行高级的模式匹配和替换。

一、基本概述sed命令的基本用法是:sed 's/模式/替换内容/g' 文件名其中,s表示substitute(替换),/模式/表示要查找的内容模式,替换内容表示要替换为的内容,g表示全局替换。

二、模式匹配1. 正则表达式在sed命令中,可以使用正则表达式作为模式进行匹配。

例如,要匹配包含单词"apple"的行,可以使用以下命令:sed '/apple/p' 文件名其中,/apple/表示要匹配的模式,p表示打印匹配的行。

2. 匹配多个模式sed命令还支持同时匹配多个模式,并对匹配到的行进行不同的处理。

例如,要匹配包含单词"apple"和"banana"的行,并将其替换为"fruit",可以使用以下命令:sed '/apple/s/apple/banana/g' 文件名其中,/apple/表示第一个模式,s表示替换,apple表示要替换的内容,banana表示替换为的内容,g表示全局替换。

3. 匹配行号sed命令还支持根据行号进行模式匹配。

例如,要匹配第3行,并将其替换为"hello",可以使用以下命令:sed '3s/.*/hello/' 文件名其中,3s表示匹配第3行,.*表示匹配任意字符,hello表示替换为的内容。

三、模式匹配与替换1. 模式匹配后替换sed命令还可以通过模式匹配的结果来进行具体的替换操作。

例如,要将包含单词"apple"的行替换为"banana",可以使用以下命令:sed -n '/apple/{s/apple/banana/g;p}' 文件名其中,/apple/表示匹配的模式,s/apple/banana/g表示替换操作,p表示打印替换后的结果。

Linux命令高级技巧使用sed命令进行正则表达式替换和编辑

Linux命令高级技巧使用sed命令进行正则表达式替换和编辑

Linux命令高级技巧使用sed命令进行正则表达式替换和编辑Linux命令高级技巧:使用sed命令进行正则表达式替换和编辑sed(stream editor)是Linux命令中功能强大的文本处理工具之一,它可以通过正则表达式实现对文本的替换和编辑操作。

在本文中,我们将介绍使用sed命令进行正则表达式替换和编辑的高级技巧。

一、sed命令概述sed命令是Unix和类Unix系统中一种重要的文本处理工具,其主要用途是根据指定的规则对文本进行替换、删除、插入、选择等操作。

sed命令可以从标准输入或文件中读取数据,并将处理结果输出到标准输出或文件中。

二、使用sed进行替换操作1. 基本替换操作sed命令的基本格式是:```sed 's/old/new/' file```其中,s表示替换操作,old表示待替换的字符串,new表示替换后的字符串,file表示待处理的文件名。

2. 全局替换操作如果要对整个文本中的所有匹配项进行替换,可以使用g标志(global):```sed 's/old/new/g' file```这样可以确保将所有匹配项都替换掉。

3. 使用&符号引用匹配项在替换字符串时,可以使用&符号引用匹配到的字符串。

例如,要将文本中的所有数字替换为"number",可以使用以下命令:```sed 's/[0-9]*/number/g' file```其中,[0-9]*表示匹配一个或多个数字。

4. 引用特殊字符如果要替换的字符串中包含特殊字符,如换行符或制表符,可以使用反斜杠进行转义。

例如,要将文本中的制表符替换为一个空格,可以使用以下命令:```sed 's/\t/ /g' file```三、使用sed进行编辑操作除了替换操作,sed命令还可以进行其他编辑操作,如删除行、插入行和打印行等。

1. 删除匹配行要删除文本中匹配特定模式的行,可以使用d命令。

linuxsed命令详解(推荐)

linuxsed命令详解(推荐)

linuxsed命令详解(推荐)概述sed命令是⼀个⾯向字符流的⾮交互式编辑器,也就是说sed不允许⽤户与它进⾏交互操作。

sed是按⾏来处理⽂本内容的。

在shell中,使⽤sed来批量修改⽂本内容是⾮常⽅便的。

sed命令的选项sed [选项] [动作]选项与参数:-n :使⽤安静(silent)模式。

在⼀般 sed 的⽤法中,所有来⾃ STDIN 的数据⼀般都会被列出到终端上。

但如果加上 -n 参数后,则只有经过sed 特殊处理的那⼀⾏(或者动作)才会被列出来。

-e :直接在命令列模式上进⾏ sed 的动作编辑;-f :直接将 sed 的动作写在⼀个⽂件内, -f filename 则可以运⾏ filename 内的 sed 动作;-r :sed 的动作⽀持的是延伸型正规表⽰法的语法。

(默认是基础正规表⽰法语法)-i :直接修改读取的⽂件内容,⽽不是输出到终端。

function:a :新增⾏, a 的后⾯可以是字串,⽽这些字串会在新的⼀⾏出现(⽬前的下⼀⾏)c :取代⾏, c 的后⾯可以接字串,这些字串可以取代 n1,n2 之间的⾏d :删除⾏,因为是删除,所以 d 后⾯通常不接任何参数,直接删除地址表⽰的⾏;i :插⼊⾏, i 的后⾯可以接字串,⽽这些字串会在新的⼀⾏出现(⽬前的上⼀⾏);p :列印,亦即将某个选择的数据印出。

通常 p 会与参数 sed -n ⼀起运⾏s :替换,可以直接进⾏替换的⼯作,通常这个 s 的动作可以搭配正规表⽰法,例如 1,20s/old/new/g ⼀般是替换符合条件的字符串⽽不是整⾏⼀般function的前⾯会有⼀个地址的限制,例如 [地址]function,表⽰我们的动作要操作的⾏。

下⾯我们通过具体的例⼦直观的看看sed的使⽤⽅法。

删除⾏//test.txt 内容如下11 aa22 bb33 cc23 dd55 2esed '1,2d' test.xx输出:33 cc23 dd55 2e其中1,2d中的d表⽰删除,⽽d前⾯的表⽰删除的⾏的地址,⽽1,2表⽰⼀个地址范围,也就是删除第1⾏和第2⾏。

Linux命令进阶使用sed进行正则表达式匹配与替换

Linux命令进阶使用sed进行正则表达式匹配与替换

Linux命令进阶使用sed进行正则表达式匹配与替换sed(Stream Editor)是Unix/Linux系统中一种常用的命令行文本编辑工具,它可以在对数据进行流式处理时,根据用户指定的规则进行字符串匹配与替换。

sed支持正则表达式,使得在处理文本时,更加灵活高效。

本文将介绍如何使用sed进行正则表达式匹配与替换,以及一些常见的用法和实例。

一、sed命令概述sed命令是Linux系统中的一个强大的文本处理工具,常用于从文件或者标准输入流中读取数据,并按照指定的规则进行处理。

它的基本语法为:```sed [options] 'command' file(s)```其中,options是可选的参数,command是sed的操作命令,file(s)表示要处理的文件。

sed命令可以直接在命令行中使用,也可以将命令写入一个脚本文件中进行批量处理。

二、sed命令选项sed命令有许多选项,下面介绍一些常用的选项:1. -n:只打印经过sed命令处理后的结果,不输出其他内容。

2. -i:直接修改原文件,而不是打印结果到标准输出。

3. -e:指定多个命令,用分号分隔。

4. -r:启用扩展正则表达式。

5. -f file:从指定的文件中读取sed命令。

三、sed基本操作命令1. p:打印匹配行。

2. d:删除匹配行。

3. s/pattern/replacement/g:替换匹配的文本。

4. i:在指定行之前插入文本。

5. a:在指定行之后追加文本。

四、使用sed进行正则表达式匹配与替换sed命令的最常见用法是进行字符串匹配与替换。

下面介绍一些常用的正则表达式匹配与替换操作:1. 使用sed进行简单的字符串替换假设我们有一个文件file.txt,内容如下:```Hello, World!```我们可以通过下面的命令使用sed进行简单的字符串替换:```sed 's/Hello/Hi/' file.txt```执行上述命令后,输出的结果如下:```Hi, World!```这条命令中,s表示替换操作,/Hello/表示要被替换的字符串,/Hi/表示替换后的字符串。

Linux中的sed命令的详细解释

Linux中的sed命令的详细解释

Linux中的sed命令的详细解释linxu下的sed命令是一个很好的文件处理工具。

下面由店铺为大家整理了linux的sed命令的详细解释的相关知识,希望对大家有帮助!一、Linux中的sed命令的详细解释sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法sed命令行格式为:sed [-nefri] ‘command’ 输入文本常用选项:-n∶使用安静(silent)模式。

在一般sed 的用法中,所有来自STDIN的资料一般都会被列出到萤幕上。

但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

-e∶直接在指令列模式上进行 sed 的动作编辑;-f∶直接将 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 就是啦!二、Linux中的sed命令详解实例在testfile文件的第四行后添加一行,并将结果输出到标准输出,在命令行提示符下输入如下命令:sed -e 4a\newLine testfile首先查看testfile中的内容如下:$ cat testfile #查看testfile 中的内容HELLO LINUX!Linux is a free unix-type opterating system.This is a linux testfile!Linux test使用sed命令后,输出结果如下:$ sed -e 4a\newline testfile #使用sed 在第四行后添加新字符串HELLO LINUX! #testfile文件原有的内容Linux is a free unix-type opterating system.This is a linux testfile!Linux testnewline以行为单位的新增/删除将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除![root@www ~]# nl /etc/passwd | sed '2,5d'1 root:x:0:0:root:/root:/bin/bash6 sync:x:5:0:sync:/sbin:/bin/sync7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown.....(后面省略).....sed 的动作为 '2,5d' ,那个 d 就是删除!因为 2-5 行给他删除了,所以显示的数据就没有 2-5 行罗~另外,注意一下,原本应该是要下达 sed -e 才对,没有 -e 也行啦!同时也要注意的是, sed 后面接的动作,请务必以 '' 两个单引号括住喔!只要删除第 2 行nl /etc/passwd | sed '2d'要删除第 3 到最后一行nl /etc/passwd | sed '3,$d'在第二行后(亦即是加在第三行)加上『drink tea?』字样![root@www ~]# nl /etc/passwd | sed '2a drink tea'1 root:x:0:0:root:/root:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologindrink tea3 daemon:x:2:2:daemon:/sbin:/sbin/nologin.....(后面省略).....那如果是要在第二行前nl /etc/passwd | sed '2i drink tea'如果是要增加两行以上,在第二行后面加入两行字,例如『Drink tea or .....』与『drink beer?』[root@www ~]# nl /etc/passwd | sed '2a Drink tea or ......\> drink beer ?'1 root:x:0:0:root:/root:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologinDrink tea or ......drink beer ?3 daemon:x:2:2:daemon:/sbin:/sbin/nologin.....(后面省略).....每一行之间都必须要以反斜杠『\ 』来进行新行的添加喔!所以,上面的例子中,我们可以发现在第一行的最后面就有 \ 存在。

linux命令sed用法

linux命令sed用法

linux命令sed用法Linux命令sed是一款常用的文本处理工具,可以用来实现文本替换、删除、插入等多种操作。

其用法有以下几个方面:1. 替换文本sed命令最常用的功能就是替换文本。

语法如下:sed 's/old/new/g' file.txt其中,s表示替换指令,old表示要替换的文本,new表示替换后的文本,g表示全局替换。

file.txt表示要操作的文件名。

举个例子,假如我们有一个文件file.txt,里面是一些话题的名称,需要将其中的“人工智能”改成“AI”,可以使用以下命令:sed 's/人工智能/AI/g' file.txt2. 删除行如果我们需要删除文件中的某些行,可以使用d指令。

语法如下:sed '/pattern/d' file.txt其中,pattern表示匹配的文本。

file.txt表示要操作的文件名。

这样,可以将匹配到的行删除。

举个例子,如果我们需要将文件file.txt中包含“敏感词”的行全部删除,可以使用以下命令:sed '/敏感词/d' file.txt3. 插入文本如果需要在文件中某一行的前面或后面插入一些文本,可以使用i或a 指令。

语法如下:sed '/pattern/i\ new_line' file.txt或者:sed '/pattern/a\ new_line' file.txt其中,pattern表示匹配的文本,i表示在匹配行前面插入,a表示在匹配行后面插入,new_line表示要插入的文本。

举个例子,如果我们需要在文件file.txt中第二行前面插入一行“这是第一行”,可以使用以下命令:sed '2i\ 这是第一行' file.txt4. 多重编辑如果需要对同一个文件进行多次编辑操作,可以使用多个sed命令,并用分号隔开。

语法如下:sed 'command1; command2; command3...' file.txt举个例子,如果我们需要将文件file.txt中的“敏感词”全部删除,并将“人工智能”改成“AI”,可以使用以下命令:sed '/敏感词/d; s/人工智能/AI/g' file.txt总结sed命令作为一款强大的文本处理工具,可以帮助我们快速进行文本替换、删除、插入等操作,提高工作效率。

Linux-sed命令详解

Linux-sed命令详解Linux sed命令详解sed是⼀种流编辑器,它是⽂本处理中⾮常好的⼯具,能够完美的配合正则表达式使⽤,功能不同凡响。

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

接着处理下⼀⾏,这样不断重复,直到⽂件末尾。

⽂件内容并没有改变,除⾮你使⽤重定向存储输出。

Sed主要⽤来⾃动编辑⼀个或多个⽂件,可以将数据⾏进⾏替换、删除、新增、选取等特定⼯作,简化对⽂件的反复操作,编写转换程序等。

sed的选项、命令、替换标记命令格式sed的命令格式:sed [options] 'command' file(s);sed的脚本格式:sed [options] -f scriptfile file(s);选项-e :直接在命令⾏模式上进⾏sed动作编辑,此为默认选项;-f :将sed的动作写在⼀个⽂件内,⽤–f filename 执⾏filename内的sed动作;-i :直接修改⽂件内容;-n :只打印模式匹配的⾏;-r :⽀持扩展表达式;-h或--help:显⽰帮助;-V或--version:显⽰版本信息。

参数⽂件:指定待处理的⽂本⽂件列表。

sed常⽤命令命令说明a\在当前⾏下⾯插⼊⽂本;i\在当前⾏上⾯插⼊⽂本;c\把选定的⾏改为新的⽂本;d删除,删除选择的⾏;D删除模板块的第⼀⾏;s替换指定字符;h拷贝模板块的内容到内存中的缓冲区;H追加模板块的内容到内存中的缓冲区;g获得内存缓冲区的内容,并替代当前模板块中的⽂本;G获得内存缓冲区的内容,并追加到当前模板块⽂本的后⾯;l列表不能打印字符的清单;n读取下⼀个输⼊⾏,⽤下⼀个命令处理新的⾏⽽不是⽤第⼀个命令;N追加下⼀个输⼊⾏到模板块后⾯并在⼆者间嵌⼊⼀个新⾏,改变当前⾏号码;p打印模板块的⾏。

P(⼤写) 打印模板块的第⼀⾏;q退出Sed;b lable 分⽀到脚本中带有标记的地⽅,如果分⽀不存在则分⽀到脚本的末尾;r file 从file中读⾏;t label if分⽀,从最后⼀⾏开始,条件⼀旦满⾜或者T,t命令,将导致分⽀到带有标号的命令处,或者到脚本的末尾;T label 错误分⽀,从最后⼀⾏开始,⼀旦发⽣错误或者T,t命令,将导致分⽀到带有标号的命令处,或者到脚本的末尾;w file 写并追加模板块到file末尾;W file 写并追加模板块的第⼀⾏到file末尾;!表⽰后⾯的命令对所有没有被选定的⾏发⽣作⽤;=打印当前⾏号;#把注释扩展到下⼀个换⾏符以前;sed替换标记命令说明g表⽰⾏内全⾯替换;p表⽰打印⾏;w表⽰把⾏写⼊⼀个⽂件;w表⽰把⾏写⼊⼀个⽂件;x表⽰互换模板块中的⽂本和缓冲区中的⽂本;y表⽰把⼀个字符翻译为另外的字符(但是不⽤于正则表达式);\1⼦串匹配标记;&已匹配字符串标记;sed元字符集字符集说明^匹配⾏开始,如:/^sed/匹配所有以sed开头的⾏;$匹配⾏结束,如:/sed$/匹配所有以sed结尾的⾏;.匹配⼀个⾮换⾏符的任意字符,如:/s.d/匹配s后接⼀个任意字符,最后是d;*匹配0个或多个字符,如:/*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个0的⾏;x\{m,\}重复字符x,⾄少m次,如:/0\{5,\}/匹配⾄少有5个0的⾏;x\{m,n\}重复字符x,⾄少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的⾏;sed实例替换操作:S命令替换⽂本中的字符串sed 's/book/books/' file-n选项和p命令⼀起使⽤表⽰只打印那些发⽣替换的⾏sed -n 's/test/TEST/p' file直接编辑⽂件选项-i,会匹配file⽂件中每⼀⾏的第⼀个book替换为bookssed -i 's/book/books/g' file全⾯替换标记g使⽤后缀 /g 标记会替换每⼀⾏中的所有匹配sed 's/book/books/g' file当需要从第N处匹配开始替换时,可以使⽤ /Ngecho sksksksksksk | sed 's/sk/SK/2g'skSKSKSKSKSKecho sksksksksksk | sed 's/sk/SK/3g'skskSKSKSKSKecho sksksksksksk | sed 's/sk/SK/4g'skskskSKSKSK定界符以上命令中字符 / 在sed中作为定界符使⽤,也可以使⽤任意的定界符sed 's:test:TEXT:g'sed 's|test|TEXT|g'sed 's#test#TEXT#g'定界符出现在样式内部时,需要进⾏转义sed 's/\/bin/\/usr\/local\/bin/g'删除操作:d命令删除空⽩⾏sed '/^$/d' file删除⽂件的第2⾏sed '2d' file删除⽂件的第2⾏到末尾所有⾏sed '2,$d' file删除⽂件最后⼀⾏sed '$d' file删除⽂件中所有开头是test的⾏sed '/^test/'d file已匹配字符串标记&正则表达式 \w\+ 匹配每⼀个单词,使⽤ [&] 替换它,& 对应于之前所匹配到的单词echo this is a test line | sed 's/\w\+/[&]/g'[this] [is] [a] [test] [line]所有以192.168.0.1开头的⾏都会被替换成它⾃已加localhostsed 's/^192.168.0.1/&localhost/' file 192.168.0.1localhost⼦串匹配标记\1匹配给定样式的其中⼀部分echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/'this is 7 in a number命令中 digit 7,被替换成了 7。

02.linux命令之批量替换文件内容sed

02.linux命令之批量替换⽂件内容sed1.sed详解⽤来⾃动编辑⼀个或多个⽂件;简化对⽂件的反复操作;编写转换程序等这⾥主要是批量的替换⽂件内容1)命令格式:sed [可选参数] {script-only-if-no-other-script} [⽂件]2).主要的参数有⼀下内容:Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...-n, --quiet, --silentsuppress automatic printing of pattern space-e script, --expression=scriptadd the script to the commands to be executed-f script-file, --file=script-fileadd the contents of script-file to the commands to be executed--follow-symlinksfollow symlinks when processing in place-i[SUFFIX], --in-place[=SUFFIX]edit files in place (makes backup if SUFFIX supplied)-c, --copyuse copy instead of rename when shuffling files in -i mode-b, --binarydoes nothing; for compatibility with WIN32/CYGWIN/MSDOS/EMX (open files in binary mode (CR+LFs are not treated specially))-l N, --line-length=Nspecify the desired line-wrap length for the `l' command--posixdisable all GNU extensions.-r, --regexp-extendeduse extended regular expressions in the script.-s, --separateconsider files as separate rather than as a single continuouslong stream.-u, --unbufferedload minimal amounts of data from the input files and flushthe output buffers more often-z, --null-dataseparate lines by NUL characters--helpdisplay this help and exit--versionoutput version information and exit 参数解析:-e<script>或--expression=<script> 以选项中指定的script来处理输⼊的⽂本⽂件。

Linux命令高级技巧使用sed命令进行批量文本替换与编辑

Linux命令高级技巧使用sed命令进行批量文本替换与编辑Linux命令高级技巧:使用sed命令进行批量文本替换与编辑sed命令在Linux系统中是一种非常常用的文本处理工具,它可以用来进行批量的文本替换与编辑。

本文将介绍sed命令的基本用法以及一些高级技巧,帮助读者更好地理解和运用sed命令。

1. sed命令基本用法sed命令的基本语法如下:```shellsed 's/源字符串/目标字符串/' 文件名```其中,s代表替换(substitute),源字符串表示需要被替换的内容,目标字符串表示替换后的内容,文件名表示需要进行替换操作的文件。

例如,我们有一个名为example.txt的文件,内容如下:```Hello, World!```我们想将其中的"Hello"替换为"Goodbye",可以使用以下sed命令:```shell```执行上述命令后,example.txt的内容将变为:```Goodbye, World!```2. sed命令修改文件内容默认情况下,sed命令只是将替换结果打印至屏幕,并不会修改原文件。

如果需要直接修改文件内容,可以使用"-i"选项,示例如下:```shellsed -i 's/Hello/Goodbye/' example.txt```执行上述命令后,example.txt的内容将直接发生改变,无需手动保存。

需要注意的是,使用"-i"选项时,sed命令会直接修改文件内容,因此建议在操作前备份文件。

3. 全局替换和仅替换第一个匹配项sed命令默认替换每行中的第一个匹配项,如果需要全局替换,可以使用"g"选项。

示例如下:```shell```上述命令将替换每行中的所有"Hello"为"Goodbye"。

sed命令用法

sed命令用法sed,即Stream EDitor的缩写,是一种流编辑器,它能够使用户对文本流进行处理,它是Linux系统中最常被使用的数据处理工具,能够快速且高效完成文本处理工作。

1、sed命令简介sed是一种流编辑器,由Unix系统提供,它能够在脚本文件中调用,以完成一些文本处理任务。

它支持一些正则表达式,也可以使用字符串或数字作为参数,用于查找和替换字符串。

它可以在文本文件、标准输入流、一个或多个文件中进行编辑和处理,它的好处在于速度快,可以使用通配符规范文本文件,使用一次可以改变多行文本,并且可以控制环境。

2、sed命令用法(1)sed命令基本形式sed [选项] 'command' filename(2)sed命令参数-i.bak:备份当前被编辑文件,以"filename.bak"格式作为存档文件;-n:使用安静模式,即不自动打印输出;-e:后接 sed 命令行,用于执行多条命令;-f:执行 sed 编辑脚本,使得程序分离命令和数据;-r:使用扩展的正则表达式;-u:表示单字节字符集。

(3)sed 命令常见功能a:在文件末尾或某一行后面添加文本;c:用新文本替换一行或多行;d:删除一行或多行;i:在文件开头或某一行前面添加文本;p:打印行;s:使用正则表达式匹配已存在的文本内容,并替换成指定文本;r:从外部文件读入文本,替换当前行;n:读取下一行文本;q:退出 sed 命令。

3、使用实例(1)打印文件的第一、三、五行sed -n '1p;3p;5p' filename.txt(2)从每一行的开头添加字符串:sed 's/^/mystring/' filename.txt(3)替换文件中的字符串sed 's/string1/string2/g' filename.txt。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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表示互换模板块中的文本和缓冲区中的文本。

5)y表示把一个字符翻译为另外的字符(但是不用于正则表达式)4. 选项1)-e command, --expression=command 允许多台编辑。

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

3)-n, --quiet, --silent4)取消默认输出。

5)-f, --filer=script-file 引导sed脚本文件名。

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

5. 元字符集1)^锚定行的开始如:/^sed/匹配所有以sed开头的行。

2)$ 锚定行的结束如:/sed$/匹配所有以sed结尾的行。

3). 匹配一个非换行符的字符如:/s.d/匹配s后接一个任意字符,然后是d。

4)* 匹配零或多个字符如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。

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

6)[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。

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

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

9)\< 锚定单词的开始,如:/\<love/匹配包含以love开头的单词的行。

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

11)x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个o的行。

12)x\{m,\} 重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。

13)x\{m,n\}重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行。

6. 实例1)删除:d命令$ sed '2d' example-----删除example文件的第二行。

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

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

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

2)替换:s命令a)sed 's/test/mytest/g' example-----在整行范围内把test替换为mytest。

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

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

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

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

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

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

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

表示把所有10替换成100。

f)选定行的范围:逗号g)$ sed -n '/test/,/check/p' example-----所有在模板test和check所确定的范围内的行都被打印。

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

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

j) $ sed 's/^\(.\)/\u\1/' example ---------将每行开头的第一个字母换成大写3)编辑:e命令a)$ sed -e '1,5d' -e 's/test/check/' example-----(-e)选项允许在同一行里执行多条命令。

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

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

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

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

它能给sed表达式赋值。

4)从文件读入:r命令a)$ sed '/test/r file' example-----file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面。

b)写入文件:w命令c)$ sed -n '/test/w file' example-----在example中所有包含test的行都被写入file里。

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

6)插入:i命令a)$ sed '/test/i\\b)new linec)-------------------------' exampled)如果test被匹配,则把反斜杠后面的文本插入到匹配行的前面。

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

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

9)退出:q命令a)$ sed '10q' example-----打印完第10行后,退出sed。

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

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

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

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

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

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

相关文档
最新文档