Linux Sed命令详解+如何替换换行符"\n"(很多面试问道)

Sed

Sed是一个强大的文本处理工具

可以采用正则匹配,对文本进行插入删除修改等操作

Sed处理的时候,一次处理一行,每一次把当前处理的存放在临时缓冲区,处理完后输出缓冲区内容到屏幕,然后把下一行读入缓冲区,如此重复,直到结尾。

1、命令格式和参数

sed [-nefr] [动作] 文件

参数:

-n 安静模式,在sed处理的时候,所有来自STDIN的数据都会被输出到终端,加上-n会只输出处理的哪行

-e 直接在命令列上进行sed动作编辑

-f 直接将sed的动作写在文件内

-r sed动作支持延伸的正则表达(默认只是基础正则)

-i 直接修改文件内容(慎用,尤其是用系统文件做练习的时候)

动作:

a append:增加,在当前行的下一行增加

c   :取代,取代n1到n2之间的行

d delete:删除

i 插入,目前行的上一行插入

p 打印,常常与-n使用

s 取代,s/old/new/g

2、基础用法详解

(1)第一行之后添加一行

[[email protected] ~]# nl file.txt | sed "1a add text"
     1  wtmp begins Mon Feb 24 14:26:08 2014
add text
     2  192.168.0.1
     3  162.12.0.123
     4  this is the last line

(2)第一行之前添加一行

[[email protected] ~]# nl file.txt | sed "1i add text"
add text
     1  wtmp begins Mon Feb 24 14:26:08 2014
     2  192.168.0.1
     3  162.12.0.123
     4  this is the last line

(3)删除第2,3行

[[email protected] ~]# nl file.txt | sed "2,3d"
     1  wtmp begins Mon Feb 24 14:26:08 2014
     4  this is the last line

(4)打印第2,3行

[[email protected] ~]# sed -n "2,3p" file.txt
192.168.0.1
162.12.0.123

这里要提到的是,尽量使用-n,不然会出现这样的结果

[[email protected] ~]# sed "2,3p" file.txt
wtmp begins Mon Feb 24 14:26:08 2014
192.168.0.1
192.168.0.1
162.12.0.123
162.12.0.123
this is the last line

(5)把168换成169

先看源文件

[[email protected] ~]# cat file.txt
wtmp begins Mon Feb 24 14:26:08 2014
192.168.0.1
162.12.0.123
this is the last line

处理后

[[email protected] ~]# sed "s/168/169/g" file.txt
wtmp begins Mon Feb 24 14:26:08 2014
192.169.0.1
162.12.0.123
this is the last line

(6)插入多行

[[email protected] ~]# nl file.txt | sed "2afirst\nsecond" file.txt
wtmp begins Mon Feb 24 14:26:08 2014
192.168.0.1
first
second
162.12.0.123
this is the last line

(7)匹配数据,然后进行操作

只需要在上述的基础上加上正则匹配

sed "/匹配的模式/处理的方式" file.txt

sed "/^root/d" file.txt 对开始有root的删除

例如

匹配begin,并删除改行

[[email protected] ~]# nl file.txt | sed "/begin/d"
     2  192.168.0.1
     3  162.12.0.123
     4  this is the last line

匹配123,并且把含有123的行162都替换成172

[[email protected] ~]# nl file.txt | sed "/123/{s/162/172/g;q}"
     1  wtmp begins Mon Feb 24 14:26:08 2014
     2  192.168.0.1
     3  172.12.0.123
     4  this is the last line

这里大括号{}里可以执行多个命令,用;隔开即可,q是退出

(8)连续编辑 -e

删除第二行,并且匹配把last替换成new

<pre name="code" class="plain">[[email protected] ~]# nl file.txt | sed -e "2d" -e "s/last/new/"
     1  wtmp begins Mon Feb 24 14:26:08 2014
     3  162.12.0.123
     4  this is the new line

(9)直接修改文件,切记不要修改系统文件

[[email protected] ~]# sed -i "/begin/{s/24/25/g}" file.txt
[[email protected] ~]# cat file.txt
wtmp begins Mon Feb 25 14:26:08 2014
192.168.0.1
162.12.0.123
this is the last line

三 、一个比较有趣的例子

如何替换\n也就是把所有的行都归为一行

第一种方式

[[email protected] ~]# sed ':a;N;$!ba;s/\n/ /g' file.txt
wtmp begins Mon Feb 25 14:26:08 2014 192.168.0.1 162.12.0.123 this is the last line

第二种方式

[[email protected] ~]# tr "\n" " " < file.txt
wtmp begins Mon Feb 25 14:26:08 2014 192.168.0.1 162.12.0.123 this is the last line last linen
时间: 2024-10-26 06:22:38

Linux Sed命令详解+如何替换换行符"\n"(很多面试问道)的相关文章

Linux Sed命令具体解释+怎样替换换行符&amp;quot;\n&amp;quot;(非常多面试问道)

Sed Sed是一个强大的文本处理工具 能够採用正则匹配.对文本进行插入删除改动等操作 Sed处理的时候,一次处理一行,每一次把当前处理的存放在暂时缓冲区.处理完后输出缓冲区内容到屏幕,然后把下一行读入缓冲区,如此反复,直到结尾. 1.命令格式和參数 sed [-nefr] [动作] 文件 參数: -n 安静模式.在sed处理的时候.全部来自STDIN的数据都会被输出到终端.加上-n会仅仅输出处理的哪行 -e 直接在命令列上进行sed动作编辑 -f 直接将sed的动作写在文件内 -r sed动作

2.2 linux sed命令详解

简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等. sed使用参数 [[email protected] ~]# sed [-nefr] [动作] 选项与参数

linux sed命令详解,非常强大

转载:http://blog.chinaunix.net/u/22677/showart_1076318.html   1.简介 sed是非交互式的编辑器.它不会修改文件,除非使用shell重定向来保存结果.默认情况下,所有的输出行都被打印到屏幕上. sed编辑器逐行处理文件(或输入),并将结果发送到屏幕.具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上.sed每处理完一行就将其从临时缓冲区删除,然后将下一行读

linux sed命令详解

Linux环境:Ubuntu16.04 sed命令 http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html http://blog.csdn.net/yiqingnian28/article/details/23133043 正则表达式 http://blog.csdn.net/wzzfeitian/article/details/8842371 sed -help 查看sed的用法 -n, --quiet, --sile

【转】linux sed命令详解

原文网址:http://www.iteye.com/topic/587673 1. Sed简介sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等.以下介绍的是Gnu版本的Sed

linux sed命令详解(转)

简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等. sed使用参数 [[email protected] ~]# sed [-nefr] [动作] 选项与参数: -n

linux 之sed命令详解

sed命令详解 sed是什么 sed是linux文本处理三剑客之一,全称 StreamEDitor,非常著名的行编辑器,功能十分强大. sed的工作过程 sed处理文本时每次从文件复制出来一行,放在工作车间,又叫做模式空间,即pattern space,然后与模式进行匹配.如果复制出来的这一行不能被模式匹配到,就默认把这一行输出至标准输出(如果用户明确指定不输出也可以). 如果能被模式匹配到,就对这行数据进行用户指定的编辑操作,编辑完成后可能输出至标准输出,也可能是用户指定的其他操作.这样第一行

linux sed&awk详解

sed sed为文本处理三剑客之一.本身就是一个管道命令,可以将文件进行增加,修改,删除,选取等操作. 格式:sed [-nrefi] [command] "文本字符串" 选项: -r: 支持扩展正则表达式: -n: 静默模式:(sed有个模式空间和保持空间,默认sed会将执行的结果保存到模式空间里面,而模式空间默认情况是输出在屏幕上,加了-n,则阻止将模式空间的内容输出到屏幕上) -f:/path/to/script_file:从指定的文件中读取脚本并运行 -e script1 -e

Linux awk 命令详解

简介linux awk命令详解 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本. awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的