当前位置: 首页 > news >正文

15 Shell Script sed命令

sed命令

一、sed命令介绍

​ stream editor for filtering and transforming text

​ 非交互式的文本流编辑器,能处理多个文本,支持正则表达式

​ 基本语法格式:

​ sed[option] “AddressCommand” [input-file]

​ sed的option

​ n:sed默认输出一遍处理的文本,-n选项会禁止这一行为

​ e:sed默认接收一个编辑语句,如果由多条可以用-e标识

​ f:sed读取-f指定的文件,解释执行文件内的编辑语句

​ i:sed将修改结果直接覆盖回文件

​ r:sed开启对扩展正则表达式的支持

​ sed的Address

​ sed默认对输入文本的每一行进行处理,可以使用Address来定义需要编辑的范围

​ Address不是必须的,如果为空默认处理每一行

​ 支持正则表达式

​ Address形式:[str[,str]]

​ /str/ 或n(行号)

​ /str/,n 或n,/str/ 或/str/,/str/

​ sed的Command(基础部分)

​ p:打印匹配的行的内容

​ =:打印行号

​ a:指定或匹配的行下方新开一行加入文本信息

​ i:指定或匹配的行上方新开一行加入文本信息

​ d:删除指定或匹配的行

​ s:查找并替换命令

​ q:指定或匹配的行后退出sed命令

二、sed基础使用

[root@localhost ~]# cat test01.txt                                                                     
1 hadoop 123
2 hive 234
3 hbase 456
4 spark 567

​ sed的”增删改查”中的查

# 查第三行的内容
[root@localhost ~]# sed -n '3p' test01.txt
3 hbase 456# 查看包含234这行的内容
[root@localhost ~]# sed -n '/234/p' test01.txt
2 hive 234# 查看包含234的行到包含567这行的内容
[root@localhost ~]# sed -n '/234/,/567/p' test01.txt
2 hive 234
3 hbase 456
4 spark 567# 查看不包含234的行到567这些行的内容
[root@localhost ~]# sed -n '/234/,/456/!p' test01.txt
1 hadoop 123
4 spark 567

​ sed的”增删改查”中的增

# 在第三行下插入一行数据
[root@localhost ~]# sed '3a\hello' test01.txt   
1 hadoop 123
2 hive 234
3 hbase 456
hello
4 spark 567# 每一行都插入
[root@localhost ~]# sed 'a\hello' test01.txt 
1 hadoop 123
hello
2 hive 234
hello
3 hbase 456
hello
4 spark 567
hello

​ sed的”增删改查”中的删

# 删除第三行
[root@localhost ~]# sed '3d' test01.txt
1 hadoop 123
2 hive 234
4 spark 567# 包含h的不删
[root@localhost ~]# sed '/h/! d' test01.txt   
1 hadoop 123
2 hive 234
3 hbase 456

​ sed的”增删改查”中的改(查找并替换)

# strom替换hive
[root@localhost ~]# sed 's/hive/strom/' test01.txt
1 hadoop 123
2 strom 234
3 hbase 456
4 spark 567# 含有h的行,将6替换为9
[root@localhost ~]# sed '/h/s/6/9/' test01.txt
1 hadoop 123
2 hive 234
3 hbase 459
4 spark 567# 将/etc/inittab最后一行的启动模式改为5
sed -r "s/(id:)[0-6](:initdefault:)/\15\2/" /etc/inittab

三、sed扩展使用

​ sed的Command(扩展)

​ h:缓存指定或匹配的行

​ x:取出缓存的内容替换指定或匹配的行

​ G:取出缓存的内容追加到指定或匹配的行下方

​ n:指定或匹配的行下一行执行下一个操作指令

​ {}:组合Command,用;符号隔开

# 删除第一行和第三行
[root@localhost ~]# sed -e '1d' -e '3d' test01.txt
2 hive 234
4 spark 567# 显示含有h,不含有34的行
[root@localhost ~]# sed -n '/h/ {/34/! p} ' test01.txt
1 hadoop 123
3 hbase 456# 将含有hive行的下一行删除
[root@localhost ~]# sed '/hive/{n;d}' test01.txt   
1 hadoop 123
2 hive 234
4 spark 567# 显示奇数行
[root@localhost ~]# sed '{n;d}' test01.txt      
1 hadoop 123
3 hbase 456# 显示偶数行
[root@localhost ~]# sed -n '{p;n}' test01.txt
1 hadoop 123
3 hbase 456# 将第三行复制到第四行后面
[root@localhost ~]# sed -e '3h' -e '4G' test01.txt 
1 hadoop 123
2 hive 234
3 hbase 456
4 spark 567
3 hbase 456# 将第1行覆盖第3行
[root@localhost ~]# sed -e '1h' -e '3x' test01.txt
1 hadoop 123
2 hive 234
1 hadoop 123
4 spark 567# 将1替换为a,2换b,3换c
[root@localhost ~]# sed 'y/123/abc/' test01.txt
a hadoop abc
b hive bc4
c hbase 456
4 spark 567# 删除并保存(永久删除)
[root@localhost ~]# sed -i '2d' test01.txt        
[root@localhost ~]# cat test01.txt
1 hadoop 123
3 hbase 456
4 spark 567

http://www.mrgr.cn/news/43016.html

相关文章:

  • 如何在银河麒麟服务器中获取关键日志信息
  • LabVIEW提高开发效率技巧----使用动态事件
  • 28 基于51单片机的两路电压检测(ADC0808)
  • JS | JavaScript中document.write()有哪些用法?
  • 如何少走弯路,成为一名炒股高手?
  • MySQL的ON DUPLICATE KEY UPDATE和REPLACE INTO
  • PHP永久性Cookie的含义
  • 基于STM32的智能窗帘控制系统设计
  • 2025,新的方向在哪?
  • Java基础知识总结(超详细整理)
  • 【移动端开发】响应式设计
  • BERT论文解读及情感分类实战(论文复现)
  • 函数式编程语言介绍
  • Java开发必知必会的一些工具
  • CategoriesController
  • 【吊打面试官系列-MySQL面试题】什么叫视图?游标是什么?
  • VTK有向包围盒
  • 震撼!工业史上第一家万级别规模的工业数字化设备效果图平台
  • 【人工智能深度学习应用】妙策API最佳实践
  • Android15之解决:Dex checksum does not match for dex:services.jar问题(二百三十五)