Linux-sed文本处理流编辑器
概述
Linux sed命令是利用script来处理文本文件。
sed可依照script的指令,来处理、编辑文本文件。
Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
- -e
<script>
或–expression=<script>
以选项中指定的script来处理输入的文本文件。 - -f
<script文件>
或–file=<script文件>
以选项中指定的script文件来处理输入的文本文件。 - -h或–help 显示帮助。
- -n或–quiet或–silent 仅显示script处理后的结果。
- -V或–version 显示版本信息。
动作说明:
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除,因为是删除,所以 d 后面通常不接任何内容;
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是了!
栗子
[root@entel2 ~]# cat sedTest.txt
xiao gong jiang1
xiao gong jiang2
xiao gong jiang3
xiao gong jiang4
xiao gong jiang5
xiao gong jiang6
xiao gong jiang7
xiao gong jiang8
xiao gong jiang9
xiao gong jiang10
xiao gong jiang11
xiao gong jiang12
xiao gong jiang13
xiao gong jiang14
xiao gong jiang15
以下例子中的数据均已上述sedTest.txt为准
在文件的第四行后添加一行,并将结果输出到标准输出
[root@entel2 ~]# sed -e 4a\Line4 sedTest.txt
xiao gong jiang1
xiao gong jiang2
xiao gong jiang3
xiao gong jiang4
Line4
xiao gong jiang5
xiao gong jiang6
xiao gong jiang7
xiao gong jiang8
xiao gong jiang9
xiao gong jiang10
xiao gong jiang11
xiao gong jiang12
xiao gong jiang13
xiao gong jiang14
xiao gong jiang15
并不会修改源文件
以行为单位的新增/删除
删除第二行到第五行
[root@entel2 ~]# cat -b sedTest.txt | sed '2,5d'1 xiao gong jiang1 6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15 [root@entel2 ~]# nl sedTest.txt |sed '2,5d'1 xiao gong jiang1 6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15
sed 的动作为 ‘2,5d’ ,那个 d 就是删除!
因为 2-5 行给他删除了,所以显示的数据就没有 2-5 行罗~
另外,注意一下,原本应该是要下达 sed -e 才对,没有 -e 也可以!
[root@entel2 ~]# nl sedTest.txt | sed -e '2,9d'1 xiao gong jiang1 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15
同时也要注意的是, sed 后面接的动作,推荐使用 ” 两个单引号括住!
只删除某一行
比如第二行
[root@entel2 ~]# nl sedTest.txt | sed '2d'1 xiao gong jiang1 3 xiao gong jiang3 4 xiao gong jiang4 5 xiao gong jiang5 6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15
删除第 3 到最后一行
[root@entel2 ~]# nl sedTest.txt | sed -e '3,$d'1 xiao gong jiang1 2 xiao gong jiang2
$ 标识最后一行
在第二行后(亦即是加在第三行)增加内容
[root@entel2 ~]# nl sedTest.txt | sed '2a this is added by sed'1 xiao gong jiang1 2 xiao gong jiang2
this is added by sed3 xiao gong jiang3 4 xiao gong jiang4 5 xiao gong jiang5 6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15
在第二行前(亦即是加在第二行)增加内容
[root@entel2 ~]# nl sedTest.txt | sed '2i this is added by sed'1 xiao gong jiang1
this is added by sed2 xiao gong jiang2 3 xiao gong jiang3 4 xiao gong jiang4 5 xiao gong jiang5 6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15
增加两行以上,在第二行后面加入两行字
[root@entel2 ~]# nl sedTest.txt | sed '2i this is added by sed \n and I am the sencond line '1 xiao gong jiang1
this is added by sed and I am the sencond line 2 xiao gong jiang2 3 xiao gong jiang3 4 xiao gong jiang4 5 xiao gong jiang5 6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15
或者
[root@entel2 ~]# nl sedTest.txt | sed '2a run or \
> walk '1 xiao gong jiang1 2 xiao gong jiang2
run or
walk 3 xiao gong jiang3 4 xiao gong jiang4 5 xiao gong jiang5 6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15
每一行之间都必须要以反斜杠『 \ 』来进行新行的添加。
以行为单位的替换与显示
将第2-5行的内容取代成为『a』
[root@entel2 ~]# nl sedTest.txt |sed '2,5c a'1 xiao gong jiang1
a6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15
[root@entel2 ~]# nl sedTest.txt |sed -e '2,5c a'1 xiao gong jiang1
a6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15
通过这个方法可以取代整行。
仅列出文件内的第 5-7 行
[root@entel2 ~]# nl sedTest.txt | sed -n '5,7p'5 xiao gong jiang5 6 xiao gong jiang6 7 xiao gong jiang7
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
-n或–quiet或–silent 仅显示script处理后的结果。如果不加 -n ,会把所有行和匹配行都输出。
数据的搜寻并显示
搜索jiang1关键字的行
[root@entel2 ~]# sed -n '/jiang1/p' sedTest.txt
xiao gong jiang1
xiao gong jiang10
xiao gong jiang11
xiao gong jiang12
xiao gong jiang13
xiao gong jiang14
xiao gong jiang15
关键字需要用 /关键字/
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
如果jiang1找到,除了输出所有行,还会输出匹配行。
使用-n的时候将只打印包含模板的行。
如果不指定 -n ,如下:
[root@entel2 ~]# sed '/jiang1/p' sedTest.txt
xiao gong jiang1
xiao gong jiang1
xiao gong jiang2
xiao gong jiang3
xiao gong jiang4
xiao gong jiang5
xiao gong jiang6
xiao gong jiang7
xiao gong jiang8
xiao gong jiang9
xiao gong jiang10
xiao gong jiang10
xiao gong jiang11
xiao gong jiang11
xiao gong jiang12
xiao gong jiang12
xiao gong jiang13
xiao gong jiang13
xiao gong jiang14
xiao gong jiang14
xiao gong jiang15
xiao gong jiang15
数据的搜寻并删除
删除所有包含jiang1的行,其他行输出
[root@entel2 ~]# nl sedTest.txt|sed '/jiang1/d' 2 xiao gong jiang2 3 xiao gong jiang3 4 xiao gong jiang4 5 xiao gong jiang5 6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9
数据的搜寻并执行命令
改造下数据:
将/etc/passwd root开头的打印出来 追加到 sedTest.txt文本中。
[root@entel2 ~]# sed -n '/^root/p' /etc/passwd >> sedTest.txt
[root@entel2 ~]# cat sedTest.txt
xiao gong jiang1
xiao gong jiang2
xiao gong jiang3
xiao gong jiang4
xiao gong jiang5
xiao gong jiang6
xiao gong jiang7
xiao gong jiang8
xiao gong jiang9
xiao gong jiang10
xiao gong jiang11
xiao gong jiang12
xiao gong jiang13
xiao gong jiang14
xiao gong jiang15
root:x:0:0:root:/root:/bin/bash
把 bash 改成 xiaogongjiang
[root@entel2 ~]# sed -n '/root/{s/bash/xiaogongjiang/;p}' sedTest.txt
root:x:0:0:root:/root:/bin/xiaogongjiang
数据的搜寻并替换
除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代。基本上 sed 的搜寻与替代的与 vi 相当的类似!他有点像这样:
sed 's/要被取代的字串/新的字串/g'
字符g代表每行出现的字符全部替换,如果想在特定字符处添加,g就有用了,否则只会替换每行第一个,而不继续往后找了.
栗子
获取etho0的网址信息
[root@entel2 ~]# ifconfig eth0 | grep "inet addr"inet addr:10.45.7.122 Bcast:10.45.17.255 Mask:255.255.252.0
利用正则去掉ip前面的部分
[root@entel2 ~]# ifconfig eth0 | grep "inet addr" | sed 's/^.*addr://g'
10.45.7.122 Bcast:10.45.17.255 Mask:255.255.252.0
去掉ip后面部分
[root@entel2 ~]# ifconfig eth0 | grep "inet addr" | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
10.45.7.122
讲解:
^ 匹配行首 例如 ^hello 会匹配以hello开头的行
. 匹配除了换行符外任意一个字符
* 前一个字符匹配0次或任意多次
$ 匹配行尾 例如 hello$ 会匹配以hello结尾的行
多点编辑
一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell
[root@entel2 ~]# nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/g'1 root:x:0:0:root:/root:/bin/blueshell2 bin:x:1:1:bin:/bin:/sbin/nologin
-e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。
直接修改文件内容(危险动作)
sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,由於这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试!
我们还是使用我们的 sedTest.txt来测试吧
利用 sed 直接在 sedTest.txt 最后一行加入『# This is a test』
[root@entel2 ~]# sed -i '$a This is for test ' sedTest.txt
[root@entel2 ~]# cat sedTest.txt
xiao gong jiang1
xiao gong jiang2
xiao gong jiang3
xiao gong jiang4
xiao gong jiang5
xiao gong jiang6
xiao gong jiang7
xiao gong jiang8
xiao gong jiang9
xiao gong jiang10
xiao gong jiang11
xiao gong jiang12
xiao gong jiang13
xiao gong jiang14
xiao gong jiang15
root:x:0:0:root:/root:/bin/bash
This is for test
由於 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增『# This is a test』!
每一行结尾若为 . 则换成 !
sed -i 's/\.$/\!/g' regular_express.txt
在每行的头添加字符,比如”HEAD”
sed 's/^/HEAD&/g' test.file
在每行的行尾添加字符,比如“TAIL”
sed 's/$/&TAIL/g' test.file
如果想导出文件,就利用重定向;如果想在原文件上更改,添加选项”-i”。
sed 的『 -i 』选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!
Linux-sed文本处理流编辑器相关推荐
- linux shell中的流编辑器sed的使用
sed流编辑器 23.3.1 sed strem editor 流编辑器 sed编辑器是一行一行的处理文件内容的.正在处理的内容存放在模式空间(缓冲区)内,处理完成后按照选项的规定进行输出或文件的 ...
- 第十九章 文本处理流编辑器:awk编程
第十九章 文本处理流编辑器:awk编程 名词解释 awk 是一种编程语言,用于linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件.或其它命令的输出.它支持用 ...
- Linux Shell编程笔记6 sed流编辑器
简介 sed是一个流编辑器,它会读取文件流,以行为单位进行处理.sed会按照顺序执行对每一行执行命令.sed把每一行结果写入标准输出,不修改任何输入文件.一般来说,文件流需要处理每一行的时候,需要借助 ...
- linux生产文本处理掌握这些就够了:awk,gawk,sed,grep,sort
shell脚本最常见的一个用途就是处理文本文件.检查日志文件.读取配置 文件.处理数据元素,shell脚本可以帮助我们将文本文件中各种数据的日常处理任务自动化.但仅靠shell脚本命令来处理文本文件的 ...
- shell脚本编程笔记(九)—— 初识流编辑器 sed
一. 流编辑器 sed编辑器被称作流编辑器(stream editor).在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式地插入.删除或替换数据中的文本.流编辑器则基于预先提供的一组命令来 ...
- shell脚本学习笔记 (流编辑器sed)
sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用非常普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出.sed不 ...
- linux sed删除指定行_shell三剑客之sed!
背景 sed(Stream Editor 流编辑器),作为三剑客的一份子,主要的功能有增删改查. 为什么称之为"流"编辑器呢? 大家知道:在Linux文件系统中,一切都可以作为文件 ...
- linux文件/文本处理工具
linux文件/文本处理工具 正则表达式 正则表达式是什么? 正则表达式如何使用 grep grep是什么 grep语法 grep使用案例 sed sed与vim的区别 sed语法 sed案例 fla ...
- linux sed 小数点,每天进步一点点——linux——sed
一.简介 sed是用于筛选和转换文本的流编辑器 二.命令格式 sed选项参数 三.常用格式 -n:使用安静(silent)模式.在一般sed的用法中,所有来自STDIN 的数据一般都会被列出到萤 ...
最新文章
- 一个母婴电子商务网站贝贝网的大数据平台及机器学习实践【转】
- Cisco Catalyst 2960系列交换机资料
- struts 2 漏洞学习总结
- arkit技术介绍_面向移动AR的触觉技术:如何以“触摸”感增强ARKit应用
- java web tcp长连接超时时间_常用java web容器http长连接超时设置
- android 中间凹背景_Android实现边缘凹凸的View
- 嵌套的SQL另外一种写法
- HTML5技术的调研以及贴吧应用总结
- 计算机演示文稿知识点,计算机基础知识:PowerPoint常用操作(一)
- 企业数字化转型:构建“感知—思考—响应—反馈优化”闭环
- 初探华尔街期权量化交易的奥秘
- 中国人工智能发展的现状
- chromium 下载地址
- 正则表达式的基本语法规则
- Vue项目实战引入百度地图(一)
- 关于连接校园网却无法上网的问题回顾
- blender的使用和常见问题
- Netty游戏服务器实战开发(6):Netty整合Zookeeper实现分布式服务发现与注册
- 娣卞叆娴呭嚭绁炵粡缃戠粶pdf
- 后台:七牛云上传图片,视频,文件
热门文章
- c++ vector iterator
- python 正则之提取字符串中的汉字,数字,字母
- Ubuntu 安装redis desktop manager
- 100. Leetcode 377. 组合总和 Ⅳ (动态规划-完全背包)
- Learning Deep Structured Semantic Models for Web Search using Clickthrough Data (DSSM)
- 机器学习笔记:线性判别分析(Fisher)
- 线性代数笔记:Khatri-Rao积
- NTU 课程笔记 CE7454(2) 概率论
- 【LeetCode从零单排】No 3 Longest Substring Without Repeating Characters
- 云端大数据实战记录-大数据推荐