【Linux】基础每日一命之sed命令

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 就是啦!

实例:
1.在testfile文件的第四行后添加一行,并将结果输出到标准输出
sed -e 4a\new testfile

a.首先查看testfile中的内容如下(演练对比)
cat testfile
HELLO LINUX!
Linux is a free unix-type opterating system.
This is a linux testfile!
Linux test

b.使用sed命令后,输出结果如下
sed -e 4a\new testfile
HELLO LINUX!
Linux is a free unix-type opterating system.
This is a linux testfile!
Linux test
new

2.以行为单位的新增/删除
将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除!
nl /etc/passwd | sed ‘2,5d‘ (d删除)

sed 的动作为 ‘2,5d‘ ,那个 d 就是删除!因为 2-5 行给他删除了,所以显示的数据就没有 2-5 行罗~ 另外,注意一下,原本应该是要下达 sed -e 才对,没有 -e 也行啦!同时也要注意的是, sed 后面接的动作,请务必以 ‘‘ 两个单引号括住喔!

只要删除第 2 行
nl /etc/passwd | sed ‘2d‘

要删除第 3 到最后一行
nl /etc/passwd | sed ‘2,$d‘

在第二行后(亦即是加在第三行)加上『drink tea?』字样!
nl /etc/passwd | sed ‘2a drink tea‘

那如果是要在第二行前
nl /etc/passwd | sed ‘2i drink tea‘

如果是要增加两行以上,在第二行后面加入两行字,例如『Drink tea or .....』与『drink beer?』
nl /etc/passwd | sed ‘2a Drink tea or ...\ drink beer‘

注:每一行之间都必须要以反斜杠『 \ 』来进行新行的添加喔!所以,上面的例子中,我们可以发现在第一行的最后面就有 \ 存在。

3.以行为单位的替换与显示
将第2-5行的内容取代成为『No 2-5 number』呢?
nl /etc/passwd | sed ‘2,5c No 2-5 number‘ (c替换)

仅列出 /etc/passwd 文件内的第 5-7 行
nl /etc/passwd | sed -n ‘5,7p‘ (p打印,一般与-n一起使用)

可以透过这个 sed 的以行为单位的显示功能, 就能够将某一个文件内的某些行号选择出来显示。
nl /etc/passwd | sed ‘/root/p‘ (关键字搜索)
如果root找到,除了输出所有行,还会输出匹配行。
使用-n的时候将只打印包含模板的行。

4.数据的搜寻并删除
删除/etc/passwd所有包含root的行,其他行输出
nl /etc/passwd | sed ‘/root/d‘ (d删除)

5.数据的搜寻并执行命令
搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell
nl /etc/passwd | sed -n ‘/root/p‘ | ‘s/bash/blueshell/g‘ (可行)

nl /etc/passwd | sed -n ‘/bash/{s/bash/blueshell/;p;q}‘
1 root:x:0:0:root:/root:/bin/blueshell

6.数据的搜寻并替换
除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代。基本上 sed 的搜寻与替代的与 vi 相当的类似
sed ‘s/要被取代的字串/新的字串/g‘

先观察原始信息,利用 /sbin/ifconfig 查询 IP
[[email protected] ~]# /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

本机的ip是192.168.1.100。
将 IP 前面的部分予以删除
/sbin/ifconfig eth0 | grep ‘inet addr‘ | sed ‘s/^.*addr://g‘
192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

接下来则是删除后续的部分,亦即: 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
将 IP 后面的部分予以删除
/sbin/inconfig eth0 | grep ‘inet addr‘ | sed ‘s/^.addr://g‘ | sed ‘s/Bcast.$//g‘

7.多点编辑
一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell
nl /etc/passwd | sed -e ‘3,$d‘ -e ‘s/bash/blueshell/g‘

注:-e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。

8.直接修改文件内容(危险动作)
sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,由於这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试! 我们还是使用下载的 regular_express.txt 文件来测试看看吧!

利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !
sed ‘s/.*$/!/g‘ regular_express.txt

利用 sed 直接在 regular_express.txt 最后一行加入『# This is a test』
sed -i ‘$a 『# This is a test』‘ regular_express.txt (-i直接修改文件,用这个方法可以省却用vim新增)

学习整理http://www.runoob.com/linux/linux-command-manual.html

原文地址:http://blog.51cto.com/000011211684/2059951

时间: 2024-10-09 00:56:46

【Linux】基础每日一命之sed命令的相关文章

【Linux】基础每日一命之awk命令(上)

awk 是一个强大的文本分析工具 语法:awk [选项参数] 'script' var=value file(s)或awk [选项参数] -f scriptfile var=value file(s) 参数说明: -F fs or --filed-separator fs :指定输入文件分隔符,fs是一个字符串或者是一个正则表达式,如-F-v var=value or --asign var=value :赋值一个用户定义变量-f scripfile or --file scriptfile :

大数据每日干货第四天(linux基础之一目录结构与常用命令)

为了和qq空间同步,也写的第四天,前面几天明天会发布,本来打算把每天学的东西记录下来,通过朋友给的建议要发的话稍微系统化下,从大数据需要的linux基础,到离线数据分析包括hadoop.hive.flume.hbase等,再到实时数据分析包括storm.kafka.redias等,最后的内存计算部分包括scala.spark.机器学习,这样循序渐进,能够系统化学习. linux基础部分会分几天进行分享,今天主要讲解的是linux介绍,目录机构与常用的命令. 1.linux介绍 lLinux是一种

【Linux】基础每日一命之cut&amp;mv&amp;scp命令

cut命令 用于显示每行从开头算起num1到num2的文字 语法:cut [-bn] [file]cut [-c] [file]cut [-df] [file] 使用说明:cut 命令从文件的每一行剪切字节.字符和字段并将这些字节.字符和字段写至标准输出.如果不指定 File 参数,cut 命令将读取标准输入.必须指定 -b.-c 或 -f 标志之一. 参数:-b :以字节为单位进行分割.这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志.-c :以字符为单位进行分割.-d :自定义分隔

【Linux】基础每日一命之useradd&amp;groupadd

useradd命令用于建立用户账号 useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号.使用useradd指令所建立的帐号,实际上是保存在/etc/passwd文本文件中. 参数说明:-c<备注> : 加上备注文字.备注文字会保存在passwd的备注栏位中.-d<登入目录> : 指定用户登入时的启始目录.-e:指定账户有效期-f:指定密码过期后多少天即关闭该账号-g:指定用户所属组-G:指定所属附加群组-m:自动建立用户账号

linux基础学习-18-linux三剑客之awk命令精讲

快捷跳转目录: * 第1章:awk基础入门       * 1.1:awk简介 * 1.2:学完awk你可以掌握: * 1.3:awk环境简介 * 1.4:awk的格式 * 1.5:模式动作 * 1.6:awk的执行过程 * 1.6.1:小结awk执行过程 * 1.7:记录和字段 * 1.7.1:记录(行) * 1.7.2:记录分隔符-RS * 1.7.3:对$0的认识 * 1.7.4:企业面试题 * 1.7.5:awk记录知识小结 * 1.7.6:字段(列) * 1.7.7:ORS与OFS简介

马哥2016全新Linux+Python高端运维班-Linux vim 末行模式,sed命令,基本bash脚本

本周作业内容: 1.复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#:%[email protected]^[[:space:]]\[email protected]#&@g384 substitutions on 384 lines#vim末行模式下%:表示全文相当于1,$s: 在末行模式下完成查找替换操作    s/要查找的内容/替换为的内容/修饰符    要查找的内容:可使用模式        替换

linux基础-第八单元 正文处理命令及tar命令

第八单元 正文处理命令及tar命令 使用cat命令进行文件的纵向合并 两种文件的纵向合并方法 归档文件和归档技术 归档的目的 什么是归档 tar命令的功能 tar命令的常用选项 使用tar命令创建.查看及抽取归档文件 使用tar命令创建归档文件 使用tar命令查看归档文件 使用tar命令抽取归档文件 文件的压缩和解压缩 什么是压缩 压缩的目的 什么是解压缩 gzip命令和gunzip命令 bzip2命令和bunzip2命令 在使用tar命令的同时进行压缩和解压缩 在使用tar命令的同时进行压缩和

linux基础命令 sed

sed     (stream editor)     linux三剑客老二,流编辑器,实现对文件的增删改替换查 参数      -n 取消默认输出      -i  修改内容     -e允许多项编辑,p打印 sed   -n  '$' p  ett,txt    $是行尾的意思,表示打印出最后一行 g与s联合使用时,表示对当前全局匹配替换 s常说的查找并替换,用一个字符串替换成另一个 sed   -i  s#oldboy#oldgirl#g   a.txt       # 是分隔符 sed是

Linux基础 详解sed命令

概述 sed是一个流编辑器(Stream EDitor).主要用于自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等.本文主要讲述了: sed工作原理 sed命令格式及常用选项 应用实例 高级编辑命令 sed工作原理 sed命令运行过程中维护着两个缓冲区,一个是活动的"模式空间(pattern space)",另一个是起辅助作用的"暂存缓冲区(holding space)".sed每次处理一行内容,整个文件像流水一样被逐行处理然后逐行输出.处理时,把当前处