1 Sed语法介绍

介绍Sed支持的基本命令及其命令行语法,Sed可以通过以下两种形式进行调用:

学习sed命令使用之前,需要掌握正则表达式的用法。

sed [-n] [-e] 'commands' files
sed [-n] -f script files

sed 命令列可以分为编辑指令与文件部分。其中编辑指令负责所有的编辑工作,文件表示所处理的文档。

其中,sed是用他的地址参数决定编辑对象,使用它的函数参数进行编辑。

sed 可以以命令行的方式进行执行,加-e,sed 还可以以脚本的方式进行执行,加-f

1.1 在命令行上执行sed指令

当编辑指令在命令行上进行执行的时候需要加上-e,其命令格式如下:

sed -e '编辑命令1' -e '编辑命令2' .....   files
  • 所有的编辑指令都在-e之后,并且在两个''之间。
  • 编辑指令的执行是从左到右的,一般在编辑指令不多的时候,往往使用命令行进行执行

例1

删除yel.dat内1-10行的数据,将其余文字中的yellow改为black

 sed -e '1,10d' -e 's/yellow/black/g' yel.dat
  • 1,10d--表示删除1-10行
  • s--表示替换
  • g--表示全部替换
  • s/查找词/替换词/g

1.2 sed编辑命令

[address1 [,address2]] function[argument]
  • address1,address2--表示为行数
  • function--sed内置函数

1.2.1 address 参数表示方法

  • 删除文件内第10行数据
sed -e '10d' test.txt
  • 删除含有'man'字符串的行
sed -e '/man/d' test.txt
  • 删除文档第2行到第100行数据
sed -e '2,100d' test.txt
  • 删除第10行含有'man'字符串的数据行
sed -e '10,/man/d' test.txt

注意:

  1. 如果使用正则表达式需要在正则表达式前后加/
// 删除含有两个t字母的数据行
sed -e '/t.*t/d' test.txt
  1. 在没有地址参数时候,全部数据参与编辑
  2. 只有一个地址参数的时候,地址所在行参与编辑运算
  3. address1,address2--表示起始行以及结束行,在之间进行编辑

    下面举几个例子进行说明:
//删除文件内所有的数据行
sed -e 'd' file //删除第5行
sed -e '5d' file //删除第一行到有apple字符串的一行
sed '1,/apple/d' file //删除有apple字符串的行到有orange字符串的行
sed -e '/apple/,/orange/' file

1.2.2 常见的命令参数

命令 参数
# 注释
d 删除数据
s 替换字符串
p 输出

1.3 执行脚本中的编辑命令

当执行的指令太多,在命令行中书写命令十分的不方便,此时可以将这些指令存储到一个脚本文件(script_file)中,用选项-f script_file进行执行。

sed -f script_file file
//书写一个脚本文件,命名为ysb.scr
//脚本内容如下
1,10d
s/yellow/black/g //指向脚本内容
sed -f ysb.scr yel.dat
  • sed执行脚本文件的时候是从上到下进行执行的
  • sed可以-e与-f进行混合使用,执行原则是从左到右,从上到下

1.4 同时对多个文件进行编辑

sed可以一次编辑多个文档,他们跟在编辑指令之后

  • 替换white.dat、rad.dat、black.dat文件内的yellow字符串转变为blue
sed -e 's/yellow/blue/g' white.dat red.dat black.dat
  • sed 按照书写顺序依次进行执行

1.5 执行输出控制

命令中的选项-n表示输出由编辑指令进行控制,sed原本会自动进行输出,加上-n之后输出由编辑命令控制。-n需要与编辑命名进行配合使用。

比如:输出while.dat文件中含有white字符串的数行

sed -n -e '/white/p' white.dat

最新文章

  1. JAVA基础-输入输出:1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。
  2. 通过Unity3D制作天空盒
  3. LoadRunner脚本
  4. Xamarin Android布局文件没有智能提示
  5. poj2387 初涉最短路
  6. java 版本安装
  7. ASP.NET上传大文件出现网页无法显示的问题
  8. JDK中日期和时间的几个常用类浅析(五)
  9. 篇3 安卓app自动化测试-搞定界面元素
  10. Python—day13 迭代器、迭代器对象、for循环对象、生成器、枚举对象
  11. C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解
  12. 将matlab数据保存为excel文件
  13. Go学习之旅
  14. 如何修改PDF文件内容,PDF怎么添加背景
  15. 3237: [Ahoi2013]连通图 线段树分治
  16. 廖雪峰Java4反射与泛型-3范型-5extends通配符
  17. Java如何格式化24小时格式的时间?
  18. 简单利用gulp-babel搭建es6转es5环境
  19. ISE创建Microblaze软核(一)
  20. HDU 2859 Phalanx (DP)

热门文章

  1. 齐博x1token字段,请务加在请求地址的头部header
  2. NLP之基于BERT的预测掩码标记和句间关系判断
  3. DQL-limit分页
  4. 【Azure 环境】Azure 云环境对于OpenSSL 3.x 的严重漏洞(CVE-2022-3602 和 CVE-2022-3786)的处理公告
  5. Json web token(JWT)攻防
  6. Easy-Classification-分类框架设计
  7. 关于解决Failed on cp file to /system - Cross-device link 报错
  8. 关于CSDN发布博客接口的研究
  9. Docker使用Calico配置网络模式
  10. 更改HTML请求方式的几种方法