[图文] 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。
- 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。