linux环境下sed命令的基础用法
前言
每次看到sed这个词就想起“种子”,心里明知道是把它和seed弄混了,但是先入为主的思想怕是改不过来了,不过现在还好,虽然把第一印象的意思弄错了,但还是很快能反应过来这是一个很“厉害”的linux命令,也有一些网友评论到,每次看到这个命令就双腿发抖,我虽然没抖,但是谈到这个命令还是有些挠头,心里有些发怵。
一味地逃避困难是不可取的,虽然心里感觉这是个很难的命令,但是今天还是要硬着头皮学一下,边学边记录,易于下次复习,那些打败不了我的困难终将使我更加强大。
sed功能
其实sed并不是一个单词,而是 stream editor 的缩写,本意为面向字符流的编辑器,说白了sed就是用来编辑文件的命令,编辑文件是我们每天经常做的工作,但是如果每天的编辑工作都类似,我们就要考虑使用sed工具来提高工作效率了,比如说把今天新增的100个文件的第一行都加上版本信息,虽然手动编辑也能做,但是你想体验一下敲个命令瞬间搞定这件事情的快感吗,我们来学习sed命令吧?
命令格式
sed [OPTION]... {script-only-if-no-other-script} [input-file]
sed 的选项不是太多,最常用的有下面两种形式:
sed -e 'sed命令脚本' input-file
sed -f 'sed命令脚本文件' input-file
命令选项
- -e :命令行模式,选项后直接跟sed编辑脚本,在只有一组脚本的情况下可以省略
- -f :脚本文件模式,选项后跟写有sed编辑脚本的文件名,运行后会执行脚本文件内的编辑动作
- -i :直接修改文件内容,如果不加这个选项是不修改源文件的,只将修改后的文件输出
- -n :只打印模式匹配的行,便于查看所作修改
以上列举只是一些常见选项,还有些比如 -l
指定每行长度,-s
指定换行的分隔符等等,用到了再来分析学习。
寻找匹配
既然是编辑文件,首先要找到需要编辑的位置,在sed命令中可以使用行号,或者字符查找等方式找到需要修改的位置,然后再执行编辑动作,常见的范围:
- x:指定的行号,表示第x行
- x,y:指定的行号范围,表示第x行到y行
- /pattern:查询到包含指定模式的行
- x,y!:指定的行号范围,表示不包括第x行到y行
sed操作
sed几乎可以实现文件的所有编辑工作,接下来尝试一些常见的用法:
打印内容
使用编辑命令 p
,可以向匹配行后面插入内容。
- 打印文件第2行和第3行的内容,命令为
sed -n '2,3p' data.txt
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ cat data.txt
1234
abc
xyz
1==
123
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ sed -n '2,3p' data.txt
abc
xyz
追加内容
使用编辑命令 a
,可以向匹配行后面插入内容。
- 在第2行后面添加文本
newline
,命令为sed '2anewline' data.txt
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ cat data.txt
1234
abc
xyz
1==
123
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ sed '2anewline' data.txt
1234
abc
newline
xyz
1==
123
- 在最后一行后面添加文本
endline
,命令为sed '$aendline' data.txt
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ cat data.txt
1234
abc
xyz
1==
123
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ sed '$aendline' data.txt
1234
abc
xyz
1==
123
endline
albert@DESKTOP-6746UC3:/mnt/d/data/shell$
插入内容
使用编辑命令 i
,可以在匹配的那一行插入内容。
- 在第1行插入文本
firstline
,命令为sed '1ifirstline' data.txt
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ cat data.txt
1234
abc
xyz
1==
123
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ sed '1ifirstline' data.txt
firstline
1234
abc
xyz
1==
123
- 在包含文本 “123” 的行插入文本
insertline
,命令为sed '/123/iinsertline' data.txt
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ cat data.txt
1234
abc
xyz
1==
123
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ sed '/123/iinsertline' data.txt
insertline
1234
abc
xyz
1==
insertline
123
更改行内容
使用编辑命令 c
,可以修改匹配行的内容。
- 将包含文本 “123” 的行替换为 “456”,命令为
sed '/123/c456' data.txt
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ cat data.txt
1234
abc
xyz
1==
123
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ sed '/123/c456' data.txt
456
abc
xyz
1==
456
- 将3、4、5行内容更改为newworld,命令为
sed '3,5cneworld' data.txt
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ cat data.txt
1234
abc
xyz
1==
123
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ sed '3,5cneworld' data.txt
1234
abc
neworld
替换行内容
使用编辑命令 s
,可以替换匹配行的内容,需要注意和 c
的区别,c
是整行的内容都改变,而 s
是只替换命令中指定的部分。
- 将文件中的文本 “123” 替换为 “456”,命令为
sed 's/123/456/g' data.txt
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ cat data.txt
1234
abc
xyz
1==
123
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ sed 's/123/456/g' data.txt
4564
abc
xyz
1==
456
删除内容
使用编辑命令 c
,可以删除匹配行。
- 删除空行,命令为
sed '/^$/d' data.txt
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ cat data.txt
1234
abc
xyz
1==
123
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ sed '/^$/d' data.txt
1234
abc
xyz
1==
123
- 从第一行开始,每两行删除掉一行,命令为
sed '1~2d' data.txt
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ cat data.txt
1234
abc
xyz
1==
123
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ sed '1~2d' data.txt
abc
1==
- 删除2行和3行以外的行,命令为
sed '2,3!d' data.txt
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ cat data.txt
1234
abc
xyz
1==
123
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ sed '2,3!d' data.txt
abc
xyz
- 删除指定行数范围内的匹配行,命令为
sed '1,3{/123/d}' data.txt
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ cat data.txt
1234
abc
xyz
1==
123
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ sed '1,3{/123/d}' data.txt
abc
xyz
1==
123
综合运用
- 删除空行并给所有内容是 “123” 的文本加上小括号
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ cat data.txt
1234
abc
xyz
1==
123
albert@DESKTOP-6746UC3:/mnt/d/data/shell$ sed -e 's/123/(&)/g' -e '/^$/d' data.txt
(123)4
abc
xyz
1==
(123)
总结
sed
是 stream editor 的缩写,表示为面向字符流的编辑器sed
命令常用的几个选项,-e
、-f
、-i
、-n
sed
命令常用的几个编辑动作,也就是选项后的常用命令有p(打印)
、a(追加)
、i(插入)
、c(改变)
、s(替换)
、d(删除)
不能打败我的困难终将使我更加强大,绊不倒我的石头最后只会被拿来踩踏,拥抱一个个困难,生活本来就是一条打怪升级之路,那有什么一帆风顺~
相关文章
- 【Linux】linux常用基本命令
- 关于Linux开源项目基础组件make编译流程
- linux环境,无dig命令-bash: dig: command not found?
- Linux基础命令使用总结
- Linux基础:用tcpdump抓包
- Linux基础:xargs命令
- Linux基础
- Linux基础之rpm及yum命令
- Linux基本操作和基础命令(Linux修改IP地址以及修改网卡地址)
- Linux Deploy在安卓手机安装LINUX系统
- Memcached 笔记与总结(1)Linux(CentOS 6.6) 和 Windows(7)下安装与配置 Memcached (1.4.24)与 Memcached 基础命令
- 一个linux内核编译时遇到的perl语法导致的编译问题解决
- Linux基础命令总结
- LINUX挂接UNIX系统NFS文件共享
- 15.linux基础
- 【Linux】linux常用基本命令(转)
- Linux基础:文件基础属性及如何更改文件属性、文件与目录管理、linux软硬链接的理解、linux用户和用户组管理
- Linux基础:系统启动过程(5个阶段)、linux关机正确流程及常用实例命令、linux目录结构(常见目录解释及目录的分类介绍)
- Linux学习---linux下的彩蛋和各种有趣的命令
- java程序员菜鸟进阶(十五)linux基础入门(三)linux用户和组管理
- 【嵌入式Linux基础入门】4、vim安装与配置
- 【Linux篇<Day06>】——Shell基础命令
- 【正点原子FPGA连载】第十四章Linux基础外设的使用 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南
- 微软加入Linux基金会以后 公开Linux版本SQL Server
- Linux基础 30分钟GDB调试快速突破
- 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---43
- 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---35
- 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---17
- 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---04
- 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---03