[图文] linux sed入门的15个小操作
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表示打印替换后的结果。
sed基本用法

`sed` 是一个流编辑器,它用于在文本流中进行基本的文本转换。
它以行为单位处理文本,可以执行插入、删除、查找和替换等操作。
以下是`sed` 的基本用法:1. 插入文本(Insertion):使用`i\` 命令可以在指定行之前插入文本。
例如,要在第5行之前插入一行文本,可以使用以下命令:```arduinosed -i '5i\This is the new line of text.' filename.txt```2. 删除文本(Deletion):使用`d` 命令可以删除指定行。
例如,要删除第10行,可以使用以下命令:```arduinosed -i '10d' filename.txt```3. 查找和替换文本(Substitution):使用`s` 命令可以查找并替换指定文本。
例如,要将所有出现的"apple" 替换为"orange",可以使用以下命令:```arduinosed -i 's/apple/orange/g' filename.txt```其中,`g` 表示全局替换,即替换每一行中的所有匹配项。
如果不加`g` 参数,只会替换每行中的第一个匹配项。
4. 打印文本(Print):使用`p` 命令可以打印指定行。
例如,要打印第10行到第20行,可以使用以下命令:```arduinosed -n '10,20p' filename.txt```使用`-n` 参数可以禁止默认打印所有行,只打印指定的行。
5. 控制输出(Control):使用`q` 命令可以退出`sed` 并打印指定行,然后退出。
例如,要打印第10行然后退出,可以使用以下命令:```arduinosed -n '10q' filename.txt```6. 正则表达式(Regular Expression):`sed` 支持使用正则表达式进行更复杂的文本处理。
sed 命令用法

sed 命令用法Sed命令是一种非常强大的文本处理工具,它可以用来编辑、转换、替换文本文件中的内容。
在本文中,我们将介绍Sed命令的用法,包括基本用法、高级用法和实际应用。
基本用法Sed命令的基本用法非常简单,它可以用来替换文本文件中的字符串。
例如,我们可以使用以下命令将文件中的“hello”替换为“world”:sed 's/hello/world/g' filename在这个命令中,“s”表示替换操作,“hello”是要被替换的字符串,“world”是要替换成的字符串,“g”表示全局替换。
除了替换操作,Sed命令还可以用来删除行、插入行、追加行等操作。
例如,我们可以使用以下命令删除文件中的第5行:sed '5d' filename在这个命令中,“5d”表示删除第5行。
高级用法除了基本用法,Sed命令还有一些高级用法,可以更加灵活地处理文本文件。
例如,我们可以使用正则表达式来匹配字符串。
例如,我们可以使用以下命令将文件中所有以“http”开头的行删除:sed '/^http/d' filename在这个命令中,“/^http/”表示匹配以“http”开头的行,“d”表示删除匹配的行。
Sed命令还可以使用分隔符来替换字符串。
例如,我们可以使用以下命令将文件中的“hello”替换为“world”:sed 's|hello|world|g' filename在这个命令中,“|”是分隔符,用来替换“/”。
实际应用Sed命令在实际应用中非常广泛,可以用来处理各种文本文件。
例如,我们可以使用Sed命令来批量修改文件名。
例如,我们可以使用以下命令将所有以“.txt”结尾的文件名中的“old”替换为“new”:for file in *.txt; do mv "$file" "$(echo $file | sed 's/old/new/g')"; done在这个命令中,“for file in *.txt”表示遍历所有以“.txt”结尾的文件,“mv”表示重命名文件,“$(echo $file | sed 's/old/new/g')”表示将文件名中的“old”替换为“new”。
linux中sed用法

linux中sed用法
sed是一种流编辑器,常用于文本替换、删除、插入等操作。
以下是linux中sed的常用用法:
1. 替换字符串
sed 's/old/new/g' file
将file中所有出现的old字符串替换为new字符串。
2. 删除行
sed '/pattern/d' file
删除file中所有包含pattern的行。
3. 插入行
sed '/pattern/i
ew line' file
在file中所有包含pattern的行前插入新行。
4. 追加行
sed '/pattern/a
ew line' file
在file中所有包含pattern的行后追加新行。
5. 替换行
sed 'N;s/old/new/' file
将file中每两行的old字符串替换为new字符串。
6. 删除空白行
sed '/^$/d' file
删除file中所有空白行。
7. 按行号替换
sed '2s/old/new/' file
将file中第2行的old字符串替换为new字符串。
以上是sed常用的几种用法,可以帮助我们更方便、高效地处理文本文件。
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⾏。
sed 命令详解 很全的

Linux sed命令实例详解功能说明:利用script来处理文本文件。
语法:sed [-hnV][-e]补充说明:sed可依照script的指令,来处理、编辑文本文件。
参数:-e<script>或—expression=<script> 以选项中指定的script来处理输入的文本文件。
-f文件>或—file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-h或—help 显示帮助。
-n或—quiet或--silent 仅显示script处理后的结果。
-V或—version 显示版本信息。
# sed -e 's/123/1234/' a.txt将a.txt文件中所有行中的123用1234替换(-e表示命令以命令行的方式执行;参数s,表示执行替换操作)# sed -e '3,5 a4' a.txt将a.txt文件中的3行到5行之间所有行的后面添加一行内容为4的行(参数a,表示添加行,参数a后面指定添加的内容)# sed -e '1 s/12/45/' a.txt把第一行的12替换成45sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`批量处理通过grep搜索出来的所有文档,将这些文档中所有的oldstring用newstring 替换(-i参数表示直接对目标文件操作)$ sed -n 's/^test/mytest/p' example.file(-n)选项和p标志一起使用表示只打印那些发生替换的行。
也就是说,如果某一行开头的test被替换成mytest,就打印它。
(^这是正则表达式中表示开头,该符号后面跟的就是开头的字符串)(参数p表示打印行)$ sed 's/^wangpan/&19850715/' example.file表示被替换换字符串被找到后,被替换的字符串通过&符号连接给出的字符串组成新字符传替换被替换的字符串,所有以wangpan开头的行都会被替换成它自已加19850715,变成wangpan19850715$ sed -n 's/\(love\)able/\1rs/p' example.filelove被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。
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-i用法

linux中sed-i用法`sed`命令的基本语法为:```sed [选项] 'script' input_file```其中,`[选项]`表示sed命令的各种参数选项,`'script'`表示要执行的sed脚本,`input_file`表示要处理的输入文件。
而`sed -i`命令的使用方法为:```sed -i [选项] 'script' file1 [file2 ...]```其中,`[选项]`表示`sed -i`命令的各种参数选项,`'script'`表示要执行的sed脚本,`file1 [file2 ...]`表示要处理的文件列表。
下面详细介绍常用的`sed -i`选项和示例用法:1.使用正则表达式替换文本:使用`s/old/new/`语法将文本中的`old`字符串替换为`new`字符串。
```sed -i 's/old/new/' file.txt```2.只替换首次出现的字符串:在替换命令末尾添加`1`,只替换每行中第一个匹配到的字符串。
```sed -i 's/old/new/1' file.txt```3.忽略大小写进行替换:使用选项`-i`结合正则表达式选项`-i`,用于忽略大小写匹配并替换。
```sed -i 's/old/new/I' file.txt```4.执行多个替换操作:可以在脚本中使用多个`s/old/new/`命令来执行多个替换操作。
```sed -i -e 's/old1/new1/' -e 's/old2/new2/' file.txt```5.处理多个文件:`sed -i`支持同时处理多个文件,可以在命令中指定多个文件名。
```sed -i 's/old/new/' file1.txt file2.txt```6.创建备份文件:可以在选项中使用备份文件的后缀,它将在原始文件的修改之前创建一个备份文件。
使用sed命令进行行删除和替换

使用sed命令进行行删除和替换简介:sed(stream editor)是Linux系统中用于流编辑的一种强大工具,它能够实现对文本文件的修改、匹配、删除和替换等操作。
本文将介绍sed命令的使用方法,着重讨论行删除和替换功能。
一、行删除1. 删除单行要删除文件中的某一行,可以使用sed命令的“d”选项。
例如,删除文件中第5行的内容,可以使用以下命令:```shellsed '5d' filename```这样就会删除文件filename中的第5行。
2. 删除多行要删除文件中的多行,可以使用以下命令:```shellsed '2,5d' filename```这样会删除文件filename中的第2行到第5行的内容。
二、行替换1. 替换单词要替换文件中的某个单词,可以使用sed命令的“s”选项。
例如,将文件中的"old_word"替换为"new_word",可以使用以下命令:```shellsed 's/old_word/new_word/g' filename```这样会将文件filename中所有的"old_word"替换为"new_word"。
2. 替换行中的内容除了替换单个单词,sed命令还可以替换一整行的内容。
例如,将文件中包含"old_word"的行替换为"new_content",可以使用以下命令:```shellsed '/old_word/c new_content' filename```这样会将文件filename中所有含有"old_word"的行替换为"new_content"。
三、应用示例以下是一些使用sed命令进行行删除和替换的示例:1. 示例一:```This is line 1This is line 2This is line 3This is line 4This is line 5```要删除第3行和第4行,可以使用以下命令:```shellsed '3,4d' filename```执行结果为:```This is line 1This is line 2This is line 5```2. 示例二:```Hello, world!This is a test.Hello, sed!Goodbye, sed!```要将文件中所有的"sed"替换为"awk",可以使用以下命令:```shellsed 's/sed/awk/g' filename```执行结果为:```Hello, world!This is a test.Hello, awk!Goodbye, awk!```总结:本文介绍了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。
sed常见用法

sed常见用法
sed是一个强大的文本处理工具,它可用于在命令行中编辑文本文件的内容。
sed通常用于过滤和转换文本数据,它可以执行的操作包括查找和替换、删除行、插入行、追加行、转换大小写等。
以下是sed的一些常见用法:
1. 查找和替换:使用sed命令可以查找并替换文本中的某个字符串,语法为:sed 's/old/new/g' filename,其中old表示要被替换的字符串,new表示替换后的字符串,g表示全局替换。
2. 删除行:使用sed命令可以删除文本中的某些行,语法为:sed 'Nd' filename,其中N表示要删除的行数。
3. 插入行:使用sed命令可以在文本中插入新的行,语法为:sed 'Niafter_text' filename,其中N表示在第N行后插入文本,i表示插入,after_text表示要插入的文本内容。
4. 追加行:使用sed命令可以在文本的末尾追加新的行,语法为:sed '$aafter_text' filename,$表示文本的末尾,a表示追加,after_text表示要追加的文本内容。
5. 转换大小写:使用sed命令可以将文本中的字母转换成大写或小写,语法为:sed 's/[a-z]/U&/g' filename(将小写字母转换成大写字母),sed 's/[A-Z]/L&/g' filename(将大写字母转换成小写字母)。
以上是sed的一些常见用法,它们可以帮助我们更轻松地处理文本文件。
linux之sed命令详解

linux之sed命令详解sed是⼀个⾮交互式⽂本编辑器,它可以对⽂本⽂件和标准输⼊进⾏编辑,标准输⼊可以来⾃键盘输⼊,⽂件重定向,字符串,变量,或者是管道的⽂本。
并将其复制到缓冲区,然后读取命令⾏的命令,对此命令要求的⾏号进⾏编辑。
⽤法:sed共有三种⽤法:①直接在命令⾏中使⽤ sed [选项] 'sed命令' 输⼊⽂件②将sed命令写⼊脚本⽂件中,使⽤sed命令调⽤ sed [选项] -f sed脚本⽂件输⼊⽂件③将sed命令写⼊脚本⽂件中,并设置为可执⾏ ./sed 脚本⽂件输⼊⽂件其中第③种的脚本⽂件中需要使⽤#!符号开头。
sed常⽤的选项-n:不打印所有的⾏到标准输出,只输出那些被命令影响到的⾏-e:表⽰将下⼀个字符串解析为sed编辑命令,如果只有⼀个编辑命令,则-e可以省略-f:表⽰正在调⽤sed脚本⽂件-r:表⽰⽀持延伸型的正则表⽰法(默认只⽀持基础正则表⽰法)-i:直接修改读取的⽂件内容,⽽不是通过屏幕输出。
sed命令sed命令通常由两部分组成。
⽂本定位和sed编辑命令。
⽂本定位对⽂本的部分⾏进⾏抽取,编辑命令对抽取的⾏进⾏编辑。
sed定位⽅式sed提供了两种定位⽅式:①通过⾏号,指定⼀⾏或者⾏号范围②使⽤正则表达式定位⽅式:x:x为指定⾏号x,y:指定从x到y的⾏号范围/pattern/:查询包含模式的⾏/pattern/pattern/:查询包含两个模式的⾏x,/pattern/:从x⾏到patter模式匹配的⾏之间x,y!:查询不包括x和y⾏号的⾏sed编辑命令p:打印匹配⾏=:打印⽂件⾏号a:在定位⾏号之后追加⽂本信息i:在定位⾏号之前插⼊⽂本信息d:删除定位⾏c:使⽤新⽂本替换⽂本⾏s:使⽤替换模式替换相应模式r:从另⼀个⽂件中读取⽂本w:将⽂本写⼊到⼀个⽂件y:变换字符q:第⼀个模式匹配后退出{}:在定位⾏执⾏命令组n:读取下⼀个输⼊⾏,⽤下⼀个命令处理新的⾏说了这么多,我们就先来体验⼀下:[fuwh@localhost 15:11 ~/stu]$ nl test1 first line2 second line3 l i n e4 what is this[fuwh@localhost 15:11 ~/stu]$ sed '2d' testfirst linel i n ewhat is this这就是sed的⼀个基本使⽤⽅式。
linux命令sed的用法

linux命令sed的用法
sed是一款Linux命令行工具,用于在文本文件中进行编辑操作。
它可以执行多种文本转换操作,如替换、删除、插入和替换等。
以下是一些常见的sed用法:
1. 替换文本中的字符:
sed 's/旧字符/新字符/g' 文件名
这个命令将文件名中的所有旧字符替换为新字符。
2. 删除文本中的行:
sed '/关键字/d' 文件名
这个命令将文件名中包含关键字的行删除。
3. 在文本中插入新行:
sed '1i 插入的文本' 文件名
这个命令将插入文本添加到文件名的第一行。
4. 在文本中追加新行:
sed '$a 追加的文本' 文件名
这个命令将添加文本追加到文件名的最后一行。
5. 替换文本中的指定行:
sed '2s/旧字符/新字符/g' 文件名
这个命令将文件名中第二行的所有旧字符替换为新字符。
除了以上用法,sed还有很多其他用法,如使用正则表达式进行匹配、使用变量进行替换等。
掌握sed的用法可以大大提高命令行工作效率。
linux中sed详细用法

sed 是Stream Editor 的缩写,它是一种流编辑器,用于对文本进行过滤和转换。
sed 命令在Linux 中广泛使用,它可以执行包括查找和替换、插入和删除行、转换数据等在内的多种文本操作。
下面是sed 的一些基本用法:基本语法bashsed [选项] '命令' 文件...选项:用于指定sed 的执行方式,如-n 用于静默模式,只输出指定命令处理后的结果。
命令:sed 执行的具体操作,如's/old/new/g' 用于全局替换old 为new。
文件...:指定需要处理的文件,可以是一个或多个文件。
常用命令s/pattern/replacement/:替换功能,其中pattern 是要被替换的模式,replacement 是要替换成的内容。
g:全局替换,将所有匹配的pattern 替换为replacement。
i:忽略大小写。
例子:sed 's/old/new/g' filename 将文件filename 中所有old 替换为new。
p:打印,输出匹配到的行。
例子:sed 'p' filename 将输出文件filename 中所有匹配的行。
d:删除,删除匹配到的行。
例子:sed 'd' filename 将删除文件filename 中所有匹配的行。
a:追加,在匹配行的后面追加文本。
例子:sed 'a\\newline' filename 在文件filename 中所有匹配行的后面添加一个新行。
i:插入,在匹配行的前面插入文本。
例子:sed 'i\\newline' filename 在文件filename 中所有匹配行的前面插入一个新行。
c:替换,直接替换匹配到的行。
例子:sed 'c\\newline' filename 将文件filename 中所有匹配的行替换为一个新的行。
Linux命令高级技巧使用sed进行文本替换和编辑

Linux命令高级技巧使用sed进行文本替换和编辑Linux命令高级技巧:使用sed进行文本替换和编辑本文介绍了Linux系统中的命令行工具sed(Stream Editor)的高级技巧,主要包括如何使用sed进行文本替换和编辑。
sed是一种强大的文本处理工具,可以对文本进行模式匹配和替换,实现高效的批量处理。
一、sed的基本用法sed命令的基本语法为:sed [选项] '动作' 文件其中,选项用于指定sed的执行方式,动作用于指定对文本进行的操作,文件为需要处理的文本文件。
1.1 文本替换sed最常用的功能之一是进行文本替换。
它可以根据指定的模式匹配文本,并将其替换为指定的内容。
示例1:替换文本中的某个单词假设有一个文本文件file.txt,内容如下:Hello, world!我们可以使用以下sed命令将文本中的"world"替换为"Linux":sed 's/world/Linux/' file.txt该命令中的s表示替换操作,/world/表示被替换的模式,Linux表示替换后的内容。
示例2:替换文本行中的某个字符串假设有一个文本文件file.txt,内容如下:This is an example这是一个示例我们可以使用以下sed命令将文本中的"example"替换为"示例":sed 's/example/示例/' file.txt1.2 正则表达式模式在sed中,可以使用正则表达式模式进行更复杂的匹配和替换。
示例3:使用正则表达式进行替换假设有一个文本文件file.txt,内容如下:applebananacarrot我们可以使用以下sed命令将以字母"c"开头的行替换为空行:sed '/^c/d' file.txt该命令中的/^c/表示以字母"c"开头的模式,d表示删除匹配的行。
linux下sed命令详解

linux下sed命令详解sed:Stream Editor⽂本流编辑,sed是⼀个“⾮交互式的”⾯向字符流的编辑器。
能同时处理多个⽂件多⾏的内容,可以不对原⽂件改动,把整个⽂件输⼊到屏幕,可以把只匹配到模式的内容输⼊到屏幕上。
还可以对原⽂件改动,但是不会再屏幕上返回结果。
sed命令的语法格式:sed的命令格式: sed [option] 'sed command'filenamesed的脚本格式:sed [option] -f 'sed script'filenamesed命令的选项(option):-n :只打印模式匹配的⾏-e :直接在命令⾏模式上进⾏sed动作编辑,此为默认选项-f :将sed的动作写在⼀个⽂件内,⽤–f filename 执⾏filename内的sed动作-r :⽀持扩展表达式-i :直接修改⽂件内容sed在⽂件中查询⽂本的⽅式:1)使⽤⾏号,可以是⼀个简单数字,或是⼀个⾏号范围x x为⾏号x,y表⽰⾏号从x到y/pattern查询包含模式的⾏/pattern /pattern查询包含两个模式的⾏pattern/,x在给定⾏号上查询包含模式的⾏x,/pattern/通过⾏号和模式查询匹配的⾏x,y!查询不包含指定⾏号x和y的⾏2)使⽤正则表达式、扩展正则表达式(必须结合-r选项)^锚点⾏⾸的符合条件的内容,⽤法格式"^pattern"$锚点⾏⾸的符合条件的内容,⽤法格式"pattern$"^$空⽩⾏.匹配任意单个字符*匹配紧挨在前⾯的字符任意次(0,1,多次).*匹配任意长度的任意字符\?匹配紧挨在前⾯的字符0次或1次\{m,n\}匹配其前⾯的字符⾄少m次,⾄多n次\{m,\}匹配其前⾯的字符⾄少m次\{m\}精确匹配前⾯的m次\{0,n\}:0到n次\<锚点词⾸----相当于 \b,⽤法格式:\<pattern\>锚点词尾,⽤法格式:\>pattern\<pattern\>单词锚点分组,⽤法格式:pattern,引⽤\1,\2[]匹配指定范围内的任意单个字符[^]匹配指定范围外的任意单个字符[:digit:]所有数字, 相当于0-9, [0-9]---> [[:digit:]][:lower:]所有的⼩写字母[:upper:]所有的⼤写字母[:alpha:]所有的字母[:alnum:]相当于0-9a-zA-Z[:space:]空⽩字符[:punct:]所有标点符号[java]1. #######sed的匹配模式⽀持正则表达式#####################2. sed'5 q'/etc/passwd#打印前5⾏3. sed-n '/r*t/p'/etc/passwd#打印匹配r有0个或者多个,后接⼀个t字符的⾏4. sed-n '/.r.*/p'/etc/passwd#打印匹配有r的⾏并且r后⾯跟任意字符5. sed-n '/o*/p'/etc/passwd#打印o字符重复任意次6. sed-n '/o\{1,\}/p'/etc/passwd#打印o字重复出现⼀次以上7. sed-n '/o\{1,3\}/p'/etc/passwd#打印o字重复出现⼀次到三次之间以上sed的编辑命令(sed command):p打印匹配⾏(和-n选项⼀起合⽤)=显⽰⽂件⾏号a\在定位⾏号后附加新⽂本信息i\在定位⾏号后插⼊新⽂本信息d删除定位⾏c\⽤新⽂本替换定位⽂本w filename写⽂本到⼀个⽂件,类似输出重定向 >r filename从另⼀个⽂件中读⽂本,类似输⼊重定向 <s使⽤替换模式替换相应模式q第⼀个模式匹配完成后退出或⽴即退出l显⽰与⼋进制ACSII代码等价的控制符{}在定位⾏执⾏的命令组,⽤分号隔开n从另⼀个⽂件中读⽂本下⼀⾏,并从下⼀条命令⽽不是第⼀条命令开始对其的处理N在数据流中添加下⼀⾏以创建⽤于处理的多⾏组g将模式2粘贴到/pattern n/y传送字符,替换单个字符对⽂件的操作⽆⾮就是”增删改查“,怎样⽤sed命令实现对⽂件的”增删改查“,玩转sed是写⾃动化脚本必须的基础之⼀。
Linux命令高级技巧使用sed命令在文本文件中进行替换操作

Linux命令高级技巧使用sed命令在文本文件中进行替换操作sed(Stream Editor)是Linux中一款非常强大的文本处理工具,可以在文本文件中进行替换、删除、插入等各种操作。
本文将介绍sed命令的高级技巧,帮助读者更好地利用sed命令进行文本操作。
sed命令的基本格式为:sed 's/原字符串/新字符串/标志' 文件名其中,s表示替换(substitute),原字符串为需替换的字符串,新字符串为替换后的字符串,标志为操作的选项。
1. 在指定行进行替换在sed命令中,我们可以通过行号或者行范围来指定需要替换的行。
例如,我们要将文本文件中第5行的"apple"替换为"orange",可以使用以下命令:sed '5s/apple/orange/' 文件名2. 在所有行进行替换若要在文本文件的所有行替换指定的字符串,可以将行号指定为g,表示替换所有匹配的字符串。
例如,将文本文件中所有的"apple"替换为"orange",可以使用以下命令:sed 's/apple/orange/g' 文件名3. 只替换首次匹配默认情况下,sed命令会替换所有匹配的字符串。
如果只希望替换首次匹配的字符串,可以使用数字1来指定行号。
例如,将文本文件中第一个匹配到的"apple"替换为"orange",可以使用以下命令:sed '1s/apple/orange/' 文件名4. 使用正则表达式进行匹配sed命令支持使用正则表达式进行匹配。
例如,我们希望将文本文件中所有以"apple"开头的字符串替换为"orange",可以使用以下命令:sed 's/^apple/orange/g' 文件名其中,^表示行首。
Linux命令高级技巧使用sed命令进行多行文本处理

Linux命令高级技巧使用sed命令进行多行文本处理Linux命令高级技巧:使用sed命令进行多行文本处理sed命令是Linux系统中非常强大且常用的命令之一,它主要用于对文件进行行编辑操作。
在文本处理中,有时我们需要对多行文本进行批量的替换、删除或插入操作,这时候sed命令就能派上用场。
本文将介绍如何利用sed命令进行多行文本处理的高级技巧。
一、替换操作sed命令的替换操作是其最基础也是最常用的功能之一。
下面以一个实例来介绍如何使用sed命令替换多行文本。
假设我们有一个名为"example.txt"的文本文件,其中包含以下内容:```This is line 1.This is line 2.This is line 3.```我们想要将第2行的内容替换为"New line 2.",可以使用以下命令:```sed '2s/.*/New line 2./' example.txt```执行以上命令后,"example.txt"的内容会变为:```This is line 1.New line 2.This is line 3.```通过在sed命令后面使用数字+字母"s"的方式,我们可以指定要替换的行数和替换后的内容。
二、删除操作除了替换操作,sed命令还可以用于删除多行文本。
下面以一个实例来介绍如何使用sed命令删除多行文本。
继续沿用上述的"example.txt"文本文件,我们想要删除第2行和第3行的内容,可以使用以下命令:```sed '2,3d' example.txt```执行以上命令后,"example.txt"的内容会变为:```This is line 1.```通过在sed命令后面使用数字+字母"d"的方式,我们可以指定要删除的行数范围。
Linux命令高级技巧使用sed命令进行行操作和插入

Linux命令高级技巧使用sed命令进行行操作和插入sed命令是Linux系统中非常常用的文本处理工具之一,可以用于执行各种文本操作,包括行的操作和插入。
本文将介绍sed命令的高级技巧,重点关注行操作和插入的用法。
一、行操作sed命令可以实现对文本中指定行的操作,包括删除、替换和复制等操作。
1. 删除行要删除指定的行,可以使用sed命令的d选项。
示例:删除文件中的第5行```sed '5d' filename```2. 替换行要替换指定的行,可以使用sed命令的c选项。
示例:将文件中的第2行替换为"Hello world"```sed '2c\Hello world' filename```3. 复制行要复制指定的行,可以使用sed命令的p选项。
示例:复制文件中的第3行并输出两次```sed '3p' filename```二、插入操作sed命令还可以实现向文本中插入内容的操作,包括行前插入、行后插入和固定位置插入等。
1. 行前插入要在指定行的前面插入内容,可以使用sed命令的i选项。
示例:在文件的第4行前插入一行内容"New line"```sed '4i\New line' filename```2. 行后插入要在指定行的后面插入内容,可以使用sed命令的a选项。
示例:在文件的第6行后插入一行内容"New line"```sed '6a\New line' filename```3. 固定位置插入要在固定位置插入内容,可以使用sed命令的r选项。
示例:在文件的第8行后插入文件"insert.txt"的内容```sed '8r insert.txt' filename```三、高级技巧除了上述基本使用方式外,sed命令还有一些高级技巧可供使用。
linuxsed命令详解

linuxsed命令详解简介sed 是⼀种在线编辑器,它⼀次处理⼀⾏内容。
处理时,把当前处理的⾏存储在临时缓冲区中,称为“模式空间”(pattern space),接着⽤sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
接着处理下⼀⾏,这样不断重复,直到⽂件末尾。
⽂件内容并没有改变,除⾮你使⽤重定向存储输出。
Sed主要⽤来⾃动编辑⼀个或多个⽂件;简化对⽂件的反复操作;编写转换程序等。
sed使⽤参数以⾏为单位的新增/删除将 /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.....(后⾯省略).....每⼀⾏之间都必须要以反斜杠『 \ 』来进⾏新⾏的添加喔!所以,上⾯的例⼦中,我们可以发现在第⼀⾏的最后⾯就有 \ 存在。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[图文] linux sed入门的15个小操作E-mail:nathanielwen@近期在学习Linux Shell编程中关于sed工具的部分,出于习惯,在经历各种百度、各种论坛、各种资料之后,一定会整理一份文档作为自己学习的小小总结,也希望可以帮助很多跟我一样渴望进入Linux世界的新手们,这里要推荐两个很好的资源:/command/UNIX.shell范例精解(第4版)这份文档里面的很多知识点,包括使用的databook文件等都来自于这两个资源,如果有侵犯版权问题,也请见谅~关于文档的几点说明:(没有耐心的童鞋可以跳过这一页)1、注释部分用“#”2、指令部分用黄色的底色标出,在其后附上指令运行截图3、每个操作涉及的选项或者参数均用红色加粗字体显示4、部分操作之后会附加知识点拓展和常用操作,希望可以更有效的使用sed工具5、文档正文部分结束后附录I会有一些知识点的补充,难度上没有增加,只是不方便安排在常用操作中6、关于元字符和正则表达式的部分,难度较大,再其他文档中会有讲解,或者也可以参阅《UNIX.shell范例精解(第4版)》,该书扫描版的pdf文档可以上网下载或者发邮箱联系我,很欢迎可以分享优秀的资源7、文档的附录II部分,列出了文件databook的内容我也是新手,理解能力,表达能力不足,很多内容不可能面面俱到,同时,必然也会存在很多纰漏,希望大家指正、见谅,我已经尽力了,thank you~#首先介绍一下命令的基本格式:sed [options] '{command}' [filename]例如sed -n '1,3p' databook出于个人习惯在接下来的例子中,通常将命令等价的表示为cat filename | sed [options] '{command}'例如 cat databook | sed -n '1,3p'#在正式开始之前,我们还需要一个用于操作的文本文件datafile,该文件会在附在附录II 里#操作一:“s”参数,替换某个单词,例如将Steve Blenheim替换为Steve Jobs为了方便阅读,我们将第一行截取,存至temp文件cat databook | head -n 1 > temp(这里的“>”是重定向符号,将默认显示在终端上的内容,写入到temp文件中)cat temp | sed 's/Blenheim/Jobs/'#知识点拓展:上述指令等价于sed 's/Blenheim/Jobs/' temp#常用操作:将空格替换为TAB键(或者其逆操作,也可以替换为其他符号)cat -A tempcat temp | sed 's/ /\t/g' | cat –A#知识点拓展:cat -A 可以显示出文件中不可打印的符号,如行尾显示为“$”,TAB显示为“^I”#操作二:“-e”选项或者“;”,一次性替换多个单词,如将Steve替换为Bill,并且将Blenheim修改为Gatescat temp | sed -e 's/Steve/Bill/' -e 's/Blenheim/Gates/'cat temp | sed 's/Steve/Bill/;s/Blenheim/Gates/'#可能有些人已经想到,直接用 Bill Gates 替换 Steve Blenheim,不就行了吗?的确是这样,这里确实是为了说明某个知识点而违背了shell简化工作的本质思想~#操作三:“g”参数,表示替换一行中所有需要替换的词#可以看到temp文件中原本各个字段是使用冒号“:”分隔的,假设我们要把分隔符改为“| ”符#现在尝试一下两种不同的指令格式,注意,指令2仅比指令1多了一个“g”参数指令1cat temp | sed 's/:/| /'指令2cat temp | sed 's/:/| /g'#操作四:匹配指定模式,在满足某一条件之后再进行操作#我们将databook的前10行存至文件temphead databook > temp#现在将含有单词“Karen”的那些行中所有的“Karen Evich”替换为“KE”,姑且称之为“单词匹配”cat temp | sed '/Karen/s/Karen Evich/KE/g'#行匹配,temp里Karen Evich出现了三次,如果我们只针对第8,9两行的名字修改cat temp | sed '8,9 s/Karen Evich/KE/g'#知识点拓展:实现更精确匹配,在这里只是作为一个好玩的小技巧介绍一下#假设temp的内如下#现在需要将第一个this之后的Tuesday替换为Friday,第二个last之后的Tuesday替换为Sundaycat temp | sed '/this/s/Tuesday/Friday/;/last/s/Tuesday/Sunday/'#注意分号连接的两条语句的顺序,与以下指令对比,注意输出结果cat temp | sed '/last/s/Tuesday/Sunday/;/this/s/Tuesday/Friday/'#操作五:“-f”选项,引入脚本文件作为sed的参数#还是用databook文件的前10行作为待处理的文本head -n 10 databook > temp#创建所作为sed参数的脚本文件SedOptionsecho 's/Steve/Bill/;s/Blenheim/Gates/;8,9 s/Karen Evich/KE/g ' > SedOptionscat temp | sed -f SedOptions#注意:无论在命令行中还是在脚本文件(SedOptions也可以称为源文件)中,都不需要单引号('')#操作六:“-n”选项,使操作状态为quietcat temp | sed -n -f SedOptions#屏幕上不显示任何内容cat temp | sed -n -f SedOptions > tmp#可以看到tmp内容为空#即“-n”选项不在屏幕上输出任何内容,也无法使用重定向#知识点拓展:“p”参数,与-n选项配合使用#修改刚才的脚本文件SedOptionsecho 's/Steve Blenheim/Bill Gates/p;8 s/Karen Evich/KE/pg ' > SedOptionscat temp | sed -n -f SedOptions#屏幕上只输出了含有“Steve Blenheim”的行和第8行,相信大家已经注意到了“p”参数的作用,也就是打印做了标记的行#我们来试一下下面的指令echo 's/Steve/Bill/p;s/Blenheim/Gates/p ' > SedOptionscat temp | sed -n -f SedOptions#由于替换分为两次完成,每次替换之后都会做一次打印操作,因此,虽然该行只是完成了一次人名的替换,但在计算机看来,需要做两次打印操作#如果指令这样写,相信大家会看得更清楚一些cat temp | sed -n -e 's/Steve/Bill/p' -e 's/Blenheim/Gates/p'#常用操作:“-n”与“p”组合析取文本文件的某几行#取出第2至第4行cat temp | sed -n '2,4p'#取出第1和第3至4行cat temp | sed -n '1p;3,4p'#这个操作跟head或者tail类似,但是功能更加强大,比如head的显示的行数范围是0-99,而且,也不可以分段截取#操作七:“d”参数,删除行#删除某几行,如删除第1,2和第4行cat temp | sed '1,2 d;4 d'#删除包含单词“Steve Blenheim”的行,注意,不能删除某个特定的单词,只能针对行操作cat temp | sed '/Karen Evich/d'#此操作类似于cat temp | grep -v "Karen Evich"#常用操作:删除空白行,正则表达式“^$”表示以行末符开头,之前已经介绍过,可以用cat -A查看空白行的表示#我们稍微修改一下temp文件,插入一个空白行至如下cat temp | sed '/^$/d'#可以看到所有的空白行都被删除了#删除从第某行开始到含有某个单词的行,如从第1行开始到第1个含有单词“Karen”的行,注意行号“1”后面的逗号cat temp | sed '1,/Karen/ d'#删除从第2行开始,到第一个空白行cat temp | sed '2,/^$/ d'#知识点拓展:“!d”参数,保留行,效果和“d”参数相反#例如保留第1,2行cat temp | sed '1,2 !d'#注意,如果想保留第1,2行和第4行#这样得到的是空白文本,因为指令的执行分两部分,第一部分截取temp文件的第1,2行,第二部分(也就是分号之后的一部分)保留截取后文件的第四行,由于第四行不存在,因此,输出为空,除非用这样的方法cat temp | sed '1,4 !d;3d'#先截取了1-4行,再删除第三行#保留包含单词“Karen”的行cat temp | sed '/Karen/!d'#操作八:“a”参数,在行号之后添加行#在文件的某一行之后插入一个新行#为了方便我们截取datebook的前5行文本至temphead -n 5 databook > tempcat temp | sed '3a this is a new line'#知识点拓展:如果需要插入两行回车符需要用\n代替cat temp| sed '1a this is a new line\nthis is another new line'#常用操作:在文件末尾插入一个新行cat temp | sed '$a the end'#此操作等类似于echo the end >> temp#但不同的是,除非使用重定向的操作,否则sed操作并不对文件做出实质性的修改#操作九:“i”参数,在行号之前插入行,用法于“a”参数类似,不再赘述cat temp | sed '1i this is the first line'#操作十:“w”参数,覆盖写入文件,注意不是追加写入#将databook中的第一至三行写入temp文件中cat databook| sed '1,3 w temp'#知识点拓展:上述操作默认会在终端上显示DoSomeThing文件的所有内容,可以用“-n”关闭显示cat databook | sed -n '1,3 w temp'#操作十一:“r”参数,读入某个文件的内容#假设tmp文件的内容为“I come from a new file”cat temp| sed '1 r tmp'#以上指令将在第1行之后插入tmp文件的内容cat temp | sed '1,3 r tmp'#上述操作会在第1至第3行的每一行之后都插入tmp文件的内容#“r”参数同样支持匹配操作cat temp | sed '/Betty/ r tmp'#在含有单词“Betty”的所有行之后插入tmp文件的内容#操作十二:“c”参数,修改行值(也就是行的内容)#将temp中含有单词“Steve Blenheim”的行替换为,“Steve Jobs:::2/24/55:”cat temp | sed '/Steve Blenheim/c Steve Jobs:::2\/24\/55:'#注意是整行替换,不是单词替换,不要和“s”参数混淆#操作十三:“q”参数,提前终止操作#假设需要将temp中前2行的所有“:”替换为“|”,而第三行的不变cat temp | sed '1,2 s/:/|/g'#用之前教过的方法显然是有效的,但是也可以试试下面的指令cat temp | sed 's/:/|/g;2q'#注意到,在打印了前两行之后,程序就提前退出了,也就是说,对第3行及以后的行,没有执行任何操作#试试看让sed程序在碰到单词“Betty”后终止cat temp | sed 's/:/|/g;/Betty/q'#注意是在碰到“Betty”之后才停止,所以输出包括了Betty Boop所在的那一行#知识点拓展:取前若干行,功能比head强大,head的范围是0-99cat databook | sed -n '1,3p'#这是我们之前教过的截取前三行的办法,再试试下面这个cat databook | sed '3q'#操作十四:“n”参数,获取某一行的下一行,注意不是用于静默操作的“-n”选项cat temp | sed -n '1 {n;p;}'#知识点拓展:花括号“{”内的是一组指令,也就是说,查找第一行的后一行和打印那一行,这两步是一起完成的,看一个更具体的例子cat temp | sed '1 {n;s/:/|/g}'#由于在花括号内,sed程序查找到了第2行,然后仅对第2行做了替换cat temp | sed '1 n;s/:/|/g'#由于没有花括号,sed程序查找到第2行,不做任何操作,然后对接下来的所有文本都做了替换#操作十五:“y”参数,转换某个字符sed '1 y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' temp#看到,指令将第一行所有的字母转换为大写,注意与“s”参数的区别:“y”参数是按字母匹配的,而“s”参数是按字母组合匹配的,具体来看echo apple | sed 'y/ap/AP/'echo apple | sed 's/ap/AP/'#第一条指令的操作是遇到a替换为A,遇到p替换为P,而第二条指令,则是遇到ap替换为AP,如果没有ap这个组合,就不替换#知识点拓展:由于是按字母匹配,因此“y”参数不支持正则表达式附录I#一、尝试以下两个不同的表达式cat temp | sed -n '/Betty/p'cat temp | sed -n '\@Betty@p'#上述结果表明,如果不想用“/”作为分隔符,可以使用其他符号代替如“@”但在之前需要添加反斜线“\”#但如果命令中使用的是“s”参数,则不需要添加反斜线“\”cat temp | sed 's@Blenheim@Jobs@g'cat temp | sed 's/Blenheim/Jobs/g'#以上两条命令等价,这种方法在查找包含“/”的字符串时很方便,如路径名或生日等#二、如果斜线“/”本身是正则表达式的一部分,则在需要在其前面加上反斜线“\”cat temp | sed -n '/Steve/s/11\/12\/56/2\/24\/56/p'#把Steve Blenheim的出生日期修改为Jobs的生日(向帮主致敬)#想想刚才介绍的内容,如果这么写,是不是可读性增加很多cat temp | sed -n '/Steve/s@11/12/56@2/24/56@p'#三、“$”可以用于匹配到文本末尾cat databook | sed '3,$d'#从第3行开始删除到文本末尾#四、按行打印的时候,还可以使用如下方式,输出包含单词“Steve”到“Karen”之间的所有行cat databook| sed -n '/Steve/,/Karen/p'#五、设temp文件中的内容为人物名#如果需要置换人物的姓名cat temp | sed 's/\(^[A-Z].*\) \([A-Z].*\)$/\2 \1/'#指令的格式仍然为 sed 's/(正则表达式1)/(正则表达式2)/'#但是正则表达式1比较复杂,连续使用了两个"\(...\)"的表达方式#这样第一个"\(...\)"中的内容保存在“\1”中#第二个"\(...\)中的内容保存在“\2”中#在正则表达式2中颠倒了“\1”和“\2”的位置#具体表现则为,在第一行中:#"\1"=\(^[A-Z].*\)=Steve#"\2"=\([A-Z].*\)$=Jobs#中间的空格需要注意#因此,第一行从“Steve Jobs”变为“Jobs Steve”#其中表达式“.*”表示0或多个除换行符之外的字符(不能单独用“*”),因此上述的式子的意思是以大写字母打头,后接0个字符或多个字符,这样写是为了增加可读性,其实还可以简写为cat temp | sed 's/\(^.*\) \(.*\)$/\2 \1/'#关于元字符和正则表达式的内容,属于sed、grep、awk等工具的高级应用,因此,超过了“入门水平”的要求,但也是新手进阶必不可少的一个门槛,希望最后的关于置换名和姓的解释可以让大家都看懂,更多的知识点,在稍后发布的文档会有更新~附录II文件databook的内容:———————————————————————————————————Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300 Betty Boop:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500Igor Chevsky:385-375-8395:3567 Populus Place, Caldwell, NJ 23875:6/18/68:23400 Norma Corder:397-857-2735:74 Pine Street, Dearborn, MI 23874:3/28/45:245700 Jennifer Cowan:548-834-2348:583 Laurel Ave., Kingsville, TX 83745:10/1/35:58900 Jon DeLoach:408-253-3122:123 Park St., San Jose, CA 04086:7/25/53:85100Karen Evich:284-758-2857:23 Edgecliff Place, Lincoln, NB 92743:7/25/53:85100Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200Fred Fardbarkle:674-843-1385:20 Parak Lane, Duluth, MN 23850:4/12/23:780900Fred Fardbarkle:674-843-1385:20 Parak Lane, Duluth, MN 23850:4/12/23:780900Lori Gortz:327-832-5728:3465 Mirlo Street, Peabody, MA 34756:10/2/65:35200Paco Gutierrez:835-365-1284:454 Easy Street, Decatur, IL 75732:2/28/53:123500 Ephram Hardy:293-259-5395:235 CarltonLane, Joliet, IL 73858:8/12/20:56700James Ikeda:834-938-8376:23445 Aster Ave., Allentown, NJ 83745:12/1/38:45000 Barbara Kertz:385-573-8326:832 Ponce Drive, Gary, IN 83756:12/1/46:268500Lesley Kirstin:408-456-1234:4 Harvard Square, Boston, MA 02133:4/22/62:52600 William Kopf:846-836-2837:6937 Ware Road, Milton, PA 93756:9/21/46:43500Sir Lancelot:837-835-8257:474 Camelot Boulevard, Bath, WY 28356:5/13/69:24500 Jesse Neal:408-233-8971:45 Rose Terrace, San Francisco, CA 92303:2/3/36:25000 Zippy Pinhead:834-823-8319:2356 Bizarro Ave., Farmount, IL 84357:1/1/67:89500Arthur Putie:923-835-8745:23 Wimp Lane, Kensington, DL 38758:8/31/69:126000 Popeye Sailor:156-454-3322:945 Bluto Street, Anywhere, USA 29358:3/19/35:22350 Jose Santiago:385-898-8357:38 Fife Way, Abilene, TX 39673:1/5/58:95600Tommy Savage:408-724-0140:1222 Oxbow Court, Sunnyvale, CA 94087:5/19/66:34200 Yukio Takeshida:387-827-1095:13 Uno Lane, Ashville, NC 23556:7/1/29:57000Vinh Tranh:438-910-7449:8235 Maple Street, Wilmington, VM 29085:9/23/63:68900。