这篇文章将为大家详细讲解有关Linux sed使用的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
sed 一种流向编辑器 stream editor,是Linux中三大文件处理工具(awk, sed, grep)之一,能配合正则表达式,对文件处理发挥重要作用。
sed 流式处理过程分成读取,执行,展示三个阶段;
1. sed读取是从输入流(文件,管道,标准输入)读取一行并存储到它叫模式空间pattern buffer中。
2. sed执行,默认情况下,所有的SED命令都在模式空间中顺序的执行,除非指定了行的地址,否则SED命令将会在所有的行上依次执行。
3. sed 发送修改后的内容到输出流。在发送数据之后,模式空间将会被清空。在文件所有的内容都被处理完成之前,上述过程将会重复执行。
sed 以行为单位进行文本处理,可以对数据进行删除,替换,新增,选取等,配合正则,功力大增,有没有想一试身手呢,接下来我们就好好来盘一盘sed。
一.执行流程示例
打印内容
sed ” test 文件读取到模式空间后,没有任何脚本来处理,直接将模式空间内容直接输出到屏幕
接收输入
sed ” 接收标准输入的内容,并进行脚本处理,这里的脚本是空,所以不处理,直接输出到屏幕
二.sed 的两种执行方式sed [-n] [-e] 'command(s)' files
sed [-n] -f scriptfile files
第一种方式是在命令行中使用,第二种方式是在SED脚本文件中使用;两种执行方式可以同时使用。
文件:
$ cat test
aaa
ddd
222
sss
12ds45
方式一:
sed -e ‘1d’ -e ‘2d’ -e ‘3d’ test
sss
12ds45
方式二:
echo -e "1d\n2d\n3d" > commands.txt
sed -f commands.txt test
sss
12ds45
三.sed 命令行参数
-n 默认情况下,模式空间中的内容在处理完成后将会打印到标准输出,该选项用于阻止该行为
-e 指定要执行的命令,使用该参数,我们可以指定多个命令,让我们打印每一行两次:
sed -e ” -e ‘p’ quote.txt
-n, –quiet, –slient:与标准的-n选项相同
-e script,–expression=script:与标准的-e选项相同
-f script-file, –file=script-file:与标准的-f选项相同
–follow-symlinks:如果提供该选项的话,在编辑的文件是符号链接时,SED将会跟随链接
-i[SUFFIX],–in-place[=SUFFIX]:该选项用于对当前文件进行编辑,如果提供了SUFFIX的话,将会备份原始文件,否则将会覆盖原始文件
-l N, –line-lenght=N:该选项用于设置行的长度为N个字符
–posix:该选项禁用所有的GNU扩展
-r,–regexp-extended:该选项将启用扩展的正则表达式
-u, –unbuffered:指定该选项的时候,SED将会从输入文件中加载最少的数据,并且更加频繁的刷出到输出缓冲区。在编辑tail -f命令的输出,你不希望等待输出的时候该选项是非常有用的。
-z,–null-data:默认情况下,SED对每一行使用换行符分割,如果提供了该选项的话,它将使用NULL字符分割行
四. sed 基本命令
本章将会讲解一些常用的SED命令,主要包括DELETE,WRITE,APPEND,CHANGE,INSERT,TRANSLATE,QUIT,READ,EXECUTE等命令
1.删除 d
格式: [address1[,address2]]d
$: sed 'd' test.txt
删除模式空间中的每一行,源文件不变
$: sed '4d' test.txt
删除第四行
$: sed '4,9d' test.txt
删除第四行到第九行
$: sed '/Time/,/Good/d'
删除以Time 和Good开头的行
2.替换 s
格式:[address1[,address2]]s/pattern/replacement/[flags]
sed 's/,/ | /g' test.txt
g:表示对所有内容进行替换
sed 's/,/|/ 2 ' test.txt
2: 表示只替换每行中第二个逗号
sed -n 's/genome/gene/p' test.txt
p: 只输出改变的行
sed -n 's/genome/gene/w junk.txt' test.txt
w: 替换后输出的内容储存到新的文件
sed -n 's/genome/gene/pi' test.txt i
: 匹配大小写
3.写入 w
格式:[address1[,address2]]w file
w 指定是写命令, file 指的是存储文件内容的文件名。使用 file 操作符的时候要小心,当提供了文件名但是文件不存在的时候它会自动创建,如果已经存在的话则会覆盖原文件的内容。
$: sed -n 'w books.bak' books.txt
创建 books.txt的副本
4.正则表达式
^ 行首
$ 行尾
. 行单个字符(除行尾外)
[] 匹配字符集
[^] 排除字符集
[-] 字符范围
? ,+ ,* 分别对应0次到1次,一次到多次,0次到多次匹配
{n} ,{n,} ,{m, n} 精确匹配N次,至少匹配N次,匹配M-N次
| 或
\s 匹配单个空白内容
\S 匹配单个非空白内容。
\w , \W 单个单词、非单词。
5.常用代码块
a.除去空白行
$: echo -e "Line #1\n\n\nLine #2" | sed '/^$/d'
b.删除连续空白行
$: echo -e "Line #1\n\n\nLine #2" | sed '/./,/^$/!d'
Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统,使用Linux能运行主要的Unix工具软件、应用程序和网络协议。
关于Linux sed使用的示例分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。