Linux中sed命令使用大全

        sed编辑器是一种流式编辑器,与常见的交互式文本编辑器相反,交互式文本编辑器比如vim,可以通过键盘来交互式插入,删除文本,替换文本,流试编辑器会在编辑器处理数据之前预先提供一组规则编辑数据流。废话少说,直接看用法。

需要强调的是,sed命令不会改变源文件的内容

1.1 sed命令格式

sed options script file

其中options有:

-e script 处理输入时,将script中指定命令添加到已经有的命令中

-f file 在处理时,将file中指定命令添加到已有的命令中

-n 不产生输出,使用print命令完成输出

sed的替换命令

echo "This is a test " | sed ‘s/test/big test/’

[Click and drag to move]

上述命令输出的结果是:

This is a big test

解释:sed 使用s命令表示替换,会将斜线间指定的第二个字符串代替第一个字符串,本例子中的使用big test 替换 test

千万要注意,使用单引号将s命令中的替换包括起来,不是双引号。

如果时替换文件中的也是一样:

sed ‘s/dog/cat/’ example.txt

[Click and drag to move]

上述命令会将example.txt中的dog替换成cat

同时使用多个命令

使用多个命令,使用-e选项就可以。

echo xx yy zz | sed -e ‘s/xx/yy/; s/zz/yy/’

[Click and drag to move]

上述结果就是yy yy yy,如果是对文件也是一样的,后面接文件名。此处时为了好演示,所以使用echo

上述需要注意的点:

1 命令之间是用;分割开来

2 多个命令是包含在一对单引号之间,不是多组

3 每个s命令要完整也就是反斜杠必须是三个,不能少,尤其最后6一个容易被忽视,不能少,不然报错

从文件中读取命令

例如有如下文件test.sed,内容如下:

s/dog/cat/
s/apple/cat/

[Click and drag to move]

使用命令如下:

echo dog cat apple | sed -f test.sed

[Click and drag to move]

得到的结果就是:

cat cat cat

sed使用-f选项来从文件中读取命令指定文件

需要注意的点:

1 文件中的多个命令不是使用;分割,而是每一行就是一个命令

2 不需要使用单引号包括起来

3 这个文件不是bash类的脚本,不需要使用!#/bin/bash 这种头文件

替换所有的

需要注意的是,默认情况下sed只是替每一行中出现的第一处,也就是说一行中有多个需要替换的,sed默认只是替换其中的第一个,如果想替换所有的,怎么弄呢?

必须要加替换标记

s/pattern/replacement/flags

[Click and drag to move]

其中替换标记有四种,

  • 1 数字,表示新文本将替换第一处模式匹配的地方

echo “xx,xx,xx” | sed ‘s/xx/yy/3’

[Click and drag to move]

结果就是:xx,xx,yy

  • 2 :g ,表示替换所有匹配到的字符串

echo “xx,xx,xx” | sed ‘s/xx/yy/g’

[Click and drag to move]

结果就是:yy,yy,yy

  • 3: p 表明原先行的内容也打印出来
echo "xx,xx,xx" | sed 's/xx/yy/p'
结果是:
yy,xx,xx
yy,xx,xx

比之前显示多了一行,常常和-n一起使用,只输出被命令替换过的行。

echo -e  "xx,xx,xx \\n zz,uu,dd\\n" | sed -n 's/xx/yy/p'
结果是:
yy,xx,xx

只是显示了被替换的行

  • 4 w file 将替换结果写入文件
echo -e  "xx,xx,xx \\n zz,uu,dd\\n" | sed -n 's/xx/yy/w' xxx.txt

替换特殊字符(/)

在替换文本中的“/”时候比较困难,这种符号常出现在路径中,如果一定要按照原来的方法做,那必须转义,

echo "/home/user/shell/" | sed 's/\/home/\/usr/'

这种虽然也可以,但是太复杂的,有简单的方法,那就是,使用其他的字符代替,使用其他字符代替分隔符,例如感叹号!

echo "/home/user/shell/" | sed 's/\/home/\/usr/'

分隔符前后两个之间的表示一个字符,用感叹号分割,比较直观。

sed 只作用于某些特定行

默认sed会作用于所有的行,如果只是想作用某特定行,那么需要添加寻行址
sed编辑器中有两种寻行址。

  • 1 以数字形式表示行区间
  • 2 用文本模式过滤

使用数字方式寻地址

echo -e  "xx,xx,xx \\nxx,xx,xx\\nxx,xx,xx" | sed  '1s/xx/yy/'

其中1s表示只替换第一行

echo -e "xx,xx,xx \\nxx,xx,xx\\nxx,xx,xx" | sed '1,3s/xx/yy/

替换1-3行是一个闭区间,这种是区间的写法

用文本模式过滤

使用正则表达试

删除命令

删除行使用d,删除特定行

echo -e  "xx,xx,xx \\nyy,yy,yy\\nzz,zz,zz" | sed '1d'
结果为:
yy,yy,yy
zz,zz,zz

删除第一行
删除区间行:

echo -e  "xx,xx,xx \\nyy,yy,yy\\nzz,zz,zz" | sed '1,2d'
结果为:
zz,zz,zz

删除从第n行到文件结尾

echo -e  "xx,xx,xx \\nyy,yy,yy\\nzz,zz,zz" | sed '2,$d'
结果为:
xx,xx,xx

插入与附加文本

插入使用 i (inset)
附加用 a (append)

插入文本

echo "xx yy zz" | sed 'i\aa bb cc'
结果为
aa bb cc
xx yy zz

需要注意,
1 i后面接的是反斜线,不是正斜线,如果写成正斜线,那么正斜线也会被当作字符输出。
2 使用插入字符串,结果是插入在文本前面

使用添加文本

echo "xx yy zz" | sed 'a\aa bb cc'
xx yy zz
aa bb cc

可以看到,使用添加文本,添加的字符串出现在文本的后面,与插入不同

插入添加到指定行

echo -e  "xx yy zz \nqq ww ee \nrr tt yy \nyy uu ii" | sed '2a\aa bb cc'
xx yy zz
qq ww ee
aa bb cc
rr tt yy
yy uu ii

这里2a表示添加到第二行的后面,如果是添加到第二行的前面,使用2i。

echo -e  "xx yy zz \nqq ww ee \nrr tt yy \nyy uu ii" | sed '2i\aa bb cc'
xx yy zz
aa bb cc
qq ww ee
rr tt yy
yy uu ii

插入出现在前面,添加出现在后面,指定行加上行号。插入行尾,可以使用$美元符号来表示,而不需要数到最后一行。

echo -e  "xx yy zz \nqq ww ee \nrr tt yy \nyy uu ii" | sed '$a\aa bb cc'
xx yy zz
qq ww ee
rr tt yy
yy uu ii
aa bb cc

修改行

修改行使用命令c(change),与插入添加命令使用方式一样,需要指定修改的行。

echo -e  "xx yy zz \nqq ww ee \nrr tt yy \nyy uu ii" | sed '2c\aa bb cc'
xx yy zz
aa bb cc
rr tt yy
yy uu ii

上述的例子为修改第二行。

转换命令

转换命令y(transform),是唯一一个可以处理单个字符sed编辑命令。

y/inchars/outchars

上述是转换命令的格式。

echo -e "abc" | sed 'y/abc/123/'
123

上述例子可以看出,转换命令中的字符是一一对应的,也可以指定行转换

echo -e "abc\nbac\ncba" | sed '1y/abc/123/'
123
bac
cba

打印

  • p命令用来文本行
  • 等号用来打印行号
  • l(小写L)用来列出行

打印行

echo -e "abc" | sed 'p'
abc
abc

p命令打印sed中输出行,所以上述为两行。单独使用这个命令没啥意义。常和其他命令结合。
常和只显示模式匹配的行一起使用

echo -e "abc\nbac\ncba" | sed -n '/abc/p'
abc

-n命令禁止其他输出,刚好和p命令友好结合,只输出匹配到的行。

打印行号

 echo -e "abc\nbac\ncba" | sed '='
1
abc
2
bac
3
cba

这样行号出现在行的前面。

列出行

列出(list)命令,可以打印数据流中的文本和不可打印的ACII字符,任何不可打印的支字符要么在其八进制前加一个反斜线,要么使用标准C风格的命名法,例如:

 echo -e "abc\nbac\ncba" | sed 'l'
abc$
abc
bac$
bac
cba$
cba

他把换行符号也打印出来了。

使用sed处理文件

写入文件用w命令

echo -e "abc\nbac\ncba" | sed 'w xxx.txt'
abc
bac
cba

数据就写入了xxx.txt文件。如果是指定行写入,加入一个行号就可以。

echo -e "abc\nbac\ncba" | sed '1w xxx.txt'
abc
bac
cba

只将第一行写入文件

echo -e "abc\nbac\ncba" | sed '1,3w xxx.txt'
abc
bac
cba

将1-3行写入文件,

从文件读取数据

使用r命令(read)

sed '1r xxx.txt'  yyy.txt
wer
abc
bac
cba
zxcv
rfhebtyre

上述命令将xxx.txt中的文本插入到yyy.txt的第一行后面。
这些命令可以相互结合使用。

好了,sed命令讲解就到这里。

Linux中sed命令使用大全相关推荐

  1. linux中往sed命令,Linux中Sed命令怎么用?

    Linux中Sed命令怎么用? 发布时间:2020-05-26 17:14:39 来源:亿速云 阅读:245 作者:鸽子 Sed介绍:sed是文本处理工具,读取文本内容,根据指定的条件进行处理如删除. ...

  2. 批量修改linux换行格式,linux中sed命令批量修改

    sed命令下批量替换文件内容 格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` 文件名 -i 表示inplace edit,就地修改文件 ...

  3. linux中替换命令详解,linux中sed命令字符串替换的用法详解

    Linux系统中sed命令可以将字符串批量替换,省去了很多麻烦,下面由学习啦小编为大家整理了linux系统中sed命令字符串替换的用法详解,希望对大家有帮助! linux中sed命令字符串替换的用法详 ...

  4. linux中sed命令用例,Linux中使用sed命令或awk命令修改常规配置文件

    一.方案: Linux中使用sed命令或awk命令修改常规配置文件 二.步骤: 1.假设有一个a.txt,内容如下: #!/bin/bash aa= bbb= ccc= #ddd= 2.如果想要把里面 ...

  5. linux中sed命令用例,sed解析和用例(马哥视频笔记)

    sed(流编辑器) sed基本用法: sed:Stream EDitor 行编辑器(另一种:全屏编辑器:vi.vim) sed:模式空间 sed默认部编辑源文件,仅对模式空间中的数据做处理:而后将模式 ...

  6. 面试linux中sed的用法,linux中sed命令的使用与注意小结

    前言 sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为『模式空间』(pattern space),接着用s ...

  7. linux sed命令新文件名,linux中sed命令批量修改

    sed命令下批量替换文件内容 格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` 文件名 -i 表示inplace edit,就地修改文件 ...

  8. linux 脚本追加最后命令,linux中sed命令批量修改

    sed命令下批量替换文件内容 格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` 文件名 -i 表示inplace edit,就地修改文件 ...

  9. linux中whoami命令的作用是,浅谈linux中的whoami与 who指令

    浅谈linux中的whoami与 who指令 whoami 功能说明: 显示用户名称 语法: whoami 补充说明: 显示自身的用户名称,本指令相当于执行  id -un 指令 whoami 与 w ...

最新文章

  1. cnn 反向传播推导_反向传播算法推导过程(非常详细)
  2. 产品经理的知识结构是什么
  3. 异步任务AsyncTask
  4. Javascript - Vue - webpack
  5. asp.net 二级域名(路由方式实现)
  6. LeetCode Algorithm 217. 存在重复元素
  7. 网络上经典的DOS小命令
  8. lda主题词评论python_Python之酒店评论主题提取LDA主题模型
  9. hhkb mac设置_我最爱的HHKB
  10. N个例子让你彻底理解java接口回调
  11. 极大似然估计与贝叶斯估计
  12. 微信小程序的转发分享功能
  13. 面试时你需要问HR什么问题?
  14. ASP.NET Web Forms 自学篇:(一)简介
  15. Shell If Else语句 数学运算 与 逻辑运算
  16. 【ICPC-457】数学笔记
  17. 徒手撸了一个 API 网关,理解更透彻了,代码已上传github,自取~
  18. 什么是REST ful?
  19. U盘中病毒,文件消失,但U盘的大小却没有改变
  20. 智能发展的四个层次:运算智能,感知智能,认知智能,强智能。道翰天琼认知智能。

热门文章

  1. php直播源码,全屏无遮盖
  2. STM32之GPIO_Mode定义和区别
  3. 18-正态映射和位移映射
  4. 初一一年级计算机试题,计算机一年级《文字录入》期末考试题(理论)A
  5. Python数据分析详解
  6. SpringSecurity+JWT实现登陆验证的思路(有一点点源码分析)
  7. 鼠标中间无法打开新标签_高性价比利器—赛睿RIVAL3 WIRELESS无线鼠标评测
  8. 条幅机-刻绘软件使用
  9. 基于JAVA校园教务排课系统(Springboot框架) 开题报告
  10. html如何让文字置顶居中,html如何让文字居中显示