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'

五. 参考文献

https://www.gnu.org/software/sed/manual/sed.html#index-Copy-hold-space-into-pattern-space-168

https://github.com/mylxsw/growing-up/blob/master/doc/%E4%B8%89%E5%8D%81%E5%88%86%E9%92%9F%E5%AD%A6%E4%BC%9ASED.md

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,104评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,816评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,697评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,836评论 1 298
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,851评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,441评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,992评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,899评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,457评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,529评论 3 341
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,664评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,346评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,025评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,511评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,611评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,081评论 3 377
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,675评论 2 359

推荐阅读更多精彩内容