sed

一、sed工作流程

sed 是一种在线的、非交互式的编辑器,它一次处理一行内容。

处理时,先把当前处理的行内容存储在临时缓冲区中,称为“模式空间”(pattern space),

之后再用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容打印到屏幕。

接着处理下一行,这样不断重复,直到文件末尾。


注意:

模式空间的内容和 AWK 中的 $0 是一样的,处理每行的时候,都会被重新赋值为当前行的内容

文件内容并没有改变,除非你使用重定向存储输出。

Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。


二、命令格式

处理单个文件的命令格式

sed    [options]  '[匹配模式]    sed 的内部命令'      file1

处理多个文件的命令格式

sed    [options]  '[匹配模式]    [sed 的内部命令]'      file1  file2

options 选项是可选的,没有也行

匹配模式 是可选的用于在文件中每一行进行匹配到模式,模式可以是正则,也可以是文件的行号

内部的命令也是可选的,但是两个单引号是必须的


注:

sed和grep不一样,不管是否找到指定的模式,它的退出状态都是0只有当命令存在语法错误时,sed的退出状态才是非0


三、支持正则表达式

与grep一样,sed在文件中查找模式时也可以使用正则表达式(RE)和各种元字符。

正则表达式是括在斜杠间的模式,用于查找和替换,以下是sed支持的元字符。


使用基本元字符集 ^, $, ., *, [], [^], \< \>,\(\),\{\}

使用扩展元字符集 ?, +, { }, |, ( )


使用扩展元字符的方式:

sed  -r

在实际使用的时候,都会加上 -r 参数,即使没有用的扩展正则也不会有任何影响。

四、sed的基本用法

打印

sed -rn  '/root/p'   file   显示root的行 ^ 匹配root 开头 ^root

p 是 sed 的内部命令,是 打印(输出) 的作用

-n 屏蔽默认输出使用

搜索替换--重点,实际应用多

替换文本中的字符串:

sed 's/book/books/' file

后缀 /g 标记会替换每一行中的所有匹配:

sed 's/book/books/g' file

当需要从第N处匹配开始替换时,可以使用 /ng

echo sksksksksksk | sed 's/sk/SK/2g'

skSKSKSKSKSK

i  是同时忽略大小写

sed  -r  's/root/shark/gi '  test

找到含有 test 的进行删除

sed  -r  ' s/^test/ d ' test


注意:

当在模式匹配中使用其他界定符号时,需要对其进行转义。

其他界定符用在 s 搜索替换时不必转义。

例如:

sed  -r  's#root#test#'  test

sed  -r  's%root%test%'    test

sed  -r  's|root|test|'    test


五、sed扩展

全部删除

sed  -r  'd '  test

第 3 行删除

sed  -r  '3  d '  test

第 1 行到第 3 行删除

sed  -r  '1,3  d '  test

从含有 root 字符串的行开始匹配,一直删除到 第 5 行

sed  -r  '/root/,5  d'  test

从含有 halt 的行开始删除,并删除此行之后的 2 行,就是总共删除 3 行

sed  -r  '/halt/,+2  d'  test

! 取反,含有 root 的行不删除,其他都删除

sed  -r  '/root/  !d'  test

使用行号除以 2 ,余数是 1 的行删除(每次处理的行号是被除数,第二个数是除数,第一数是 余数)

sed  -r  '1~2  d'  test

sed -n '1~2 p' test    #奇数行

sed -n '2~2 p' test    #偶数行

六、sed命令

替换命令:s

替换文本中的字符串:

sed 's/root/test/g'  test

sed -rn 's/[0-9][0-9]/&.5/  p'  test    #&代表在查找串中匹配到的所有内容

//把所有查找到的两位数后面都加上 .5

sed -r 's/(test)qwer/\1技能/g'  test       #()括号分组,一个()就是一组\1,第二个就是\2

//把匹配到的所有test后面的qwer都换成“技能”

追加命令:a

sed -r '$ a 1.1.1.1 www.qianfeng.com' /etc/hosts    #在最后添加1.1.1.1 www.qianfeng.com

插入命令:i

sed -r '2i\111' /etc/hosts    #把111插入到第二行

修改命令:c

sed -r '2c\111' /etc/hosts    #把第二行命令修改为111

七、sed常见命令

删除开头的一个或者多个  空格或者 Tab 键

sed -ri '/^[ \t]*/d'  test

YUM 源修改

sudo sed -e s/^#baseurl/baseurl/g \

-e s/^mirrorlist/#mirrorlist/g  \

-i  /etc/yum.repos.d/CentOS-Base.repo

删除配置文件中//号的注释行

sed -ri '\Y^[ \t]*//Yd' file.conf

删除无内容空行

- 开头和结尾之间什么都没有的行

- 开头和结尾之间有多个空格的行

- 开头和结尾之间有多个  Tab 键的行

sed -ri '/^[ \t]*$/d' file.conf

删除注释行和空行

以下 3 中效果一样

sed -ri '/^[ \t]*#/d; /^[ \t]*$/d'  test

sed -ri '/^[ \t]*#|^[ \t]*$/d'  test

sed -ri '/^[ \t]*($|#)/d'  test

给文件行添加注释

sed -ri '1,5s/^/#/ '  test

sed -r '2,6s/(.*)/#\1/'  test

sed中使用外部变量

var=1

sed -r "3a$var1" /etc/hosts

sed -r '$a'"$var1" /etc/hosts

sed -r "\$a  $var1" /etc/hosts

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

推荐阅读更多精彩内容

  • sed ## 流编辑器 sed 一、sed工作流程 sed 是一种在线的、非交互式的编辑器,它一次处理一行内容。处...
    花泽菠菜xqc阅读 952评论 0 0
  • 行前或行后插入 sed 'p;s/^.*$/--------/' file awk '{print $0;prin...
    不排版阅读 523评论 0 0
  • 简介 sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(p...
    699b979fc4da阅读 1,008评论 0 1
  • 说明:本篇文章来自老男孩,这里只做备份记录 功能说明 Sed是Stream Editor(流编辑器)缩写,是操作、...
    think_lonely阅读 719评论 0 2
  • Sed工具工作原理及特性 1. sed是流编辑器,每一次读取一行到内存中,即称之为模式空间(pattern spa...
    魏镇坪阅读 10,971评论 0 12