简介

sed是一个流编辑器,它会读取文件流,以行为单位进行处理。sed会按照顺序执行对每一行执行命令。sed把每一行结果写入标准输出,不修改任何输入文件。一般来说,文件流需要处理每一行的时候,需要借助sed进行处理。

打印和删除

-e参数表示执行一个命令脚本,而这个脚本都用' '扩起来。脚本支持正则式,比如需要使用/ /括起来正则式的内容。

几个常见的用法:

sed -e 'd' /tmp/passwd.bak  # 对每一行执行删除,'d'就是删除命令,所以没有任何输出
sed -e '5d' /tmp/passwd.bak  # 删除第五行
sed -e '1,5d' /tmp/passwd.bak  # 删除第一行到第五行,闭区间
sed -e '/^#/d' /etc/rc.local  # 删除所有的注释行,注意正则式/^#/

几个常用的正则式:

有几个其它的命令,比如-p选项表示打印匹配上的行。

一个例子,打印main函数的内容:

sed -n -e '/main[[:space:]]*(/,/^)/p' /tmp/a.c | more

替换

以行为单位,执行文本流的替换,举个例子:

sed -e 's/power/jiecheng/g' /tmp/a.c

把所有的power替换成jiechengs表示替换命令,g表示全局操作,如果没有g,则只替换第一个。

sed -e '1,10s/power/jiecheng/g' /tmp/a.c

和上个命令一样,只不过范围是1-10行了

sed -e '/main[[:space:]]*(/,/^)/s/power/jiecheng/g' /tmp/a.c

范围成了main函数内部了。

sed可以修改分隔符,比如

sed -e 's:/usr/local:/usr:g' mylist.txt

/usr/local替换成/usr,此时分隔符成了:,当然也可以添加\来转义操作。

注意一点,sed正则替换的时候,默认替换全文的最长匹配,而不是每一行的匹配。举个例子:
main.html文件

<html>
<head>main page<head>
<body><b>This</b>is <b>main</b>page.</body>
</html>

我们打算去掉所有的标签,如果直接执行:

sed -e 's/<.*>//g' main.html

那么所有的都会被替换了,输出空。正确的匹配方式应该是:

sed -e 's/<[^>]*>//g' main.html

意思是,^>表示非>符号,遇到了就跳出任意字符的匹配,而匹配上了*后的>,直接替换匹配结束。

命令组合

有些时候,我们需要把多个命令应用到一行中,下面给出几个组合方式。第一个是使用分号分隔命令:

sed -n -e '=;p' /tmp/passwd.bak

输出行号,然后打印。

Linux Shell编程笔记6 sed流编辑器相关推荐

  1. linux+shell+func,Linux shell编程笔记总结

    Linux Shell学习笔记简介 Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口.它是命令语言.命令解释程序及程序设计语言的统称.shell是用户和Linux内核之间的接 ...

  2. Linux Shell编程笔记8 进程

    进程查看机制 ps (process state缩写)命令是进程查看命名,用于Linux系统中所有的进程查看.在当前文件夹下执行如下命令ps,显示: PID TTY TIME CMD7784 pts/ ...

  3. Linux Shell编程笔记7 awk的应用

    简介 awk是用于基本文本处理的工具.一般遇到复杂格式等的处理问题时,应该优先想到使用awk.比awk更加高端的,还有perl语言,它专门用于文本处理.python也有丰富的文字处理功能,但是这是它的 ...

  4. Linux Shell 编程笔记

    2019独角兽企业重金招聘Python工程师标准>>> 常用命令 echo [STR] # 打印显示字符串 printf '[FORMAT]' [ARG] #格式化输出(不支持数据流 ...

  5. Linux Shell编程笔记10 Shell数组的补充

    数组可以通过下标或值进行索引,如果不存在,则值为空.比如: #!/bin/bash arr[0]=hello echo ${arr[1]} # 输出空内容 使用@输出所有数组的内容,使用#和@输出元素 ...

  6. Linux Shell编程笔记9 SSH和Screen工具

    SSH SSH的作用是对数据进行加密处理.在互联网上直接使用明文传输是不安全的.中间人攻击就是通过窃取发送的明文数据,然后进行攻击.一个较为安全的方式是,把数据进行加密传输,这样使得攻击者获取到的数据 ...

  7. 《Linux Shell编程学习笔记之一》

    <Linux Shell编程学习笔记之一> 前言 由于自己一直在Windows上面编程,用linux用的比较少,学习linux还是本科大二学的一点点知识.因此自己就准备花点时间来熟悉下li ...

  8. Linux Shell编程学习笔记(4)

    Linux Shell编程学习笔记(2015-7-20) 分类:linux shell   今天学习了Linux Shell中的控制结构.其实大多数语言的控制结构这一块都是基本类似的,有了C语言的基础 ...

  9. Linux Shell编程学习笔记(2)

    Linux Shell编程学习笔记(2015-7-12) 分类:linux shell Shell变量 一:关于Shell变量   Shell是一种弱类型的语言,变量存储的一切值都是字符串.Shell ...

最新文章

  1. 优秀案例:12个精美的设计工作室 设计公司网站
  2. thinkphp中配置信息的二维数组设置与使用
  3. Twitter创始人Jack Dorsey的每日必做和不做清单
  4. 无监督学习 k-means_无监督学习-第4部分
  5. Struts2.3,s:iterator,c:forEach遍历map中的list集合
  6. 服务器物品展示框刷物品,我的世界1period;11period;2展示框刷物品bug | 手游网游页游攻略大全...
  7. vb6 方法‘ ’作用于对象 失败_JS基础入门-对象的使用
  8. 构造方法 c# 0106
  9. Objective-C语法快速参考
  10. UWP开发---通过委托跨页面导航
  11. java运行多个linux命令_在shell的一行中运行多个命令
  12. 一张以你为中心的地图
  13. html打开软件连接的代码,《前端开发从零学起》Lesson.7 HTML中超链接的使用方法...
  14. EDA鸿蒙是不是,如果华为不强研鸿蒙,和阿里合作,新系统或早用到手机上了? - 区块网...
  15. hdu1402(大数a*bfft模板)
  16. spss分析方法-T检验
  17. 怎样在 iPhone 或 iPad 上使用“快捷指令”?
  18. 【语音识别入门】Python音频处理示例(含完整代码)
  19. CMD命令查看局域网内所有主机名及IP
  20. 刁肥宅数据结构课设:布隆过滤器的实现和应用(v 1.1,修正非最终版)

热门文章

  1. mybatisplus page排序_MyBatisPlus分页的同时指定排序规则说明
  2. RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds
  3. Python tkinter的text控件加滚动条
  4. Altium AD20更改原理图栅格改为点栅格
  5. X server:linux 图形界面原理
  6. Flex的TabNavigator中tab触发的事件
  7. 简单应用定时器和监听器
  8. linux系列的命令补充
  9. 个人作业2--APP案例分析
  10. Fiddler绕过前端直接和后台进行交互