Linux - sed编辑器

流编辑器sed
sed本身也是一个管线命令,可以分析standard input,而且sed 还可将数据进行取代、删除、新增、撷取特定行等等的功能。

(1)了解sed这个编辑器
刚学linux时我们首先接触的就是vim编辑器,它是Linux中最基础的文本编辑器。其实sed也可以执行与vim编辑器相同的编辑内容。不过,sed编辑器并没有提供交互式使用方式,使用者只能在命令行输入编辑命令、指定文件名,然后在屏幕上查看输出。(我好像还没写过vim编辑器的文章,改天补上~)
(2)sed编辑器是怎么工作的?
sed 编辑器可以逐行处理文件(或输入),并将结果输送到屏幕。sed 会把当前正在处理的行保存在一个临时缓存区中,这个缓存区称为模式空间或临时缓冲,在处理完模式空间中的行后(即在该行上执行完sed命令后),就把该行发送到屏幕上。
在运行过程中,sed把每一行都存在临时缓存区中,对这个副本进行编辑,所以不会修改或破坏源文件。

sed不会修改正在编辑的文件

sed命令格式

sed [options] ‘Adress Command1;Command2;...’ filename
详细介绍一下它命令格式的内容:

  • [options]为参数,常用参数选项有这么几个:
    -- -n: 只将被sed特殊处理的行输出到屏幕,而保存在模式空间的未处理行不显示(常用)
    -- -i :直接修改读取内容,不输出(这样会修改源文件)
    -- -r : 使用扩展正则表达式(预设是基础正规表示法语法)
    -- -e :直接在指令列模式上进行sed的动作编辑
    -- -f : 指定一个sed脚本文件到命令行执行

1. Adress 为Sed定位

因为sed命令在没有给定的位置时,会默认处理所有行。如果想要提高工作效率,可以使用sed定位,sed编辑器便只操作 指定的文本行。以下为sed支持的几种地址类型:

1.1 通过行号匹配

-- 1.1.1 按照行号n~m匹配
其中,n指 起始匹配行,m指 步长。例如 sed -n ‘2~5 p’ test.txt指的是输出test.txt文件中的 第2,7,12,17...行(p即print --"打印")
-- 1.1.2 按照行号n,m+匹配
n指 起始匹配行,m+指向下匹配n行。例如 sed -n ‘2,5+ p’ test.txt指的是输出test.txt文件中的 n到n+m行(共匹配m+1行)

1.2 按匹配条件匹配

/pattern/command形式,匹配条件通常夹在//中间(双斜杠//里面可以是正则表达式),例如sed -n ‘/^peaceful/ p’ test.txt指的是输出test.txt文件中所有以peaceful为行首的行。

1.3 通过adress定位匹配

sed -n 'addr1,addr2 p' filename形式,addr1和addr2为两个地址,他们可以是数字, 也可以是正则表达式。
例如:sed -n '1,6 p' test.txt匹配test.txt中的1-6行;sed -n '/^peaceful/,6+ p' test.txt匹配test.txt中行首为peaceful的行及以下6行。

2.command为sed行使功能

  • command 指命令(多个命令用;分隔)
    注意:sed后面接的动作都要用单引号''括住

2.1 新增 a

-- a:新增,a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)
eg: sed '1a peaceful' test.txt在第1行后(也就是第2行)增加peaceful

2.2 取代c

-- c:整行取代,c的后面可以接字符串,用以取代指定行
eg: sed '1,3c peaceful' test.txt 将test.txt的1-3行用peaceful取代

2.3 删除d

-- d:删除,eg: sed '2,5d' test.txt删除第2行到第5行
eg: sed '1,3d' test.txt 删除 test.txt的1-3行

2.4 插入i

-- i:插入,i的后面可以接字符串,而这些字符串会插入到目前的上一行
eg: sed '3i peaceful' test.txt将会在第三行出现peaceful (注意,这里的i是command而不是👆上面的参数i)
-- a:与i类似,后面可以接字符串,而这些字符串会会插入到目前的下一行

2.5 打印p

-- p:打印
eg: sed -n '1,3p' test.txt

2.6 数据取代s

-- s:数据取代,通常可以搭配正规表示法
eg:sed '1,20s/old/new/' test.txt 将test中第1到20行的old变成new

3.sed的应用实例

3.1以行为单位的新增/删除功能

nl /etc/passwd | sed '2,5d'
列出/etc/passwd的内容+打印行号,同时将2-5行删除
nl /etc/passwd | sed '2a drink tea'
列出/etc/passwd的内容+打印行号,同时在第三行加上“drink tea”
如果要新增好几行,可以使用\进行新行的增加,补鸟哥的图来理解:

sed的新增多行用 \

3.2 以行为单位的取代与显示功能

nl /etc/passwd | sed '2,5c No 2-5 number'
将/etc/passwd 2-5行的内容取代为No 2-5 number
nl /etc/passwd | sed -n '5,7p'
列出/etc/passwd 的第5-7行(不用纠结得使用head -n 7 | tail -n 3 啦~),同时,你可能会疑惑为什么这里加了参数-n:因为不加n的话5-7行会重复输出

3.3 部分数据的搜寻并取代的功能

除了整行的处理模式之外,sed还可以用行为单位进行部分数据的搜寻并取代的功能,与vi的取代相似:sed 's/要被取代的字符串/新的字符串/g'。这里配合着用到些正则表达式,还不懂正则表达式是什么东东的小伙伴可以从Linux - 正则表达式学习。

3.3.1 查询IP

ifconfig | grep -w inet 查询IP

ifconfig | grep -w inet 查询IP

ifconfig | grep -w inet | sed 's/^.*inet //g'将IP前面的“inet+空格”部分删掉
ifconfig | grep -w inet | sed 's/^.*inet //g'

ifconfig | grep -w inet | sed 's/^.*inet //g' | sed 's/ .*$//g'将IP前面的“inet+空格”部分删掉,同时将IP后面的一切都删掉

ifconfig | grep -w inet | sed 's/^.*inet //g' | sed 's/ .*$//g'

3.3.2 查看man_db.conf

通过cat /etc/man_db.conf | grep 'MAN'查看文本内容

cat /etc/man_db.conf | grep 'MAN'

cat /etc/man_db.conf | grep 'MAN' | sed 's/^#.*$//g'通过sed的取代功能将注释行的字符都删掉
cat /etc/man_db.conf | grep 'MAN' | sed 's/^#.*$//g'

cat /etc/man_db.conf | grep 'MAN' | sed 's/^#.*$//g' | sed '/^$/d'通过sed删除指定空白行,这里的空白行使用的是^$

cat /etc/man_db.conf | grep 'MAN' | sed 's/^#.*$//g' | sed '/^$/d'

小Tip总结:

  • 指定字符的删除:通过sed 's/要被删除的字符串//g'的形式实现指定字符的删除
  • 空白行的删除:通过sed '/^$/d'
  • 最后一行新增一行:通过 sed -i '$a # This is a test' filename(-i会直接修改文件哦;$代表最后一行;a代表新增;# This is a test为新增内容)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容

  • 一、前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件等等。如果我们相对这些文件进行一些...
    以七v为书阅读 1,512评论 0 5
  • 文章作者:Tyan博客:noahsnail.com | CSDN | 简书 1. sed编辑器 sed编辑...
    SnailTyan阅读 450评论 0 1
  • 基础命令 主要的命令和快捷键 Linux系统命令由三部分组成:cmd + [options]+[operation...
    485b1aca799e阅读 1,094评论 0 0
  • Linux sed命令是利用script来处理文本文件。sed可依照script的指令,来处理、编辑文本文件。Se...
    姜淑均阅读 726评论 1 2
  • sed ## 流编辑器 sed 一、sed工作流程 sed 是一种在线的、非交互式的编辑器,它一次处理一行内容。处...
    花泽菠菜xqc阅读 946评论 0 0