sed命令细说

sed:

工作方式:此命令也是针对文档行的一个命令。他的工作方式同grep一样,工作目标是文档中的行,一样是把文档复制到他的内存中进行操作,只要用户不保存,就不会改变原文件。

磁盘源文件=A地-->复制到内存中的源文件或部分原文件=B地--->操作、筛选或者编辑后的保存在内存中的文件=C地

常用选项:

-n:表示不再输出不符合从B地道C地的内容

-e:可以同时使用多个编辑指令对B地的内容进行编辑、筛选、造作

-f: 后边可以跟一个脚本文件,此脚本文件每行都是一个编辑命令

-r:  支持使用扩展正则表达式

-i : 表示直接对原文件进行编辑,此选项比较危险哦

地址定界:及表示我们要对那些行进行编辑

1): 不给地址,即空地址。 则表示对全文进行处理

2):单地址

#:制定行

3): 一个范围

#,#:

#。+#:

/pat1/,/part2/

4) 步进:-

1-2:表示所有的奇数行

2-2:表示所有的偶数行

    sed 常用编辑选项

d : 删除  即删除“B地”的内容

sed  ‘1,5d‘ /etc/fstab  表示删除1行和5行的内容

sed  ‘/^UUID/d‘ /etc/fstab  表示删除以UUID开头的每一行

sed  ‘3d‘ /etc/fstab      表示删除第三行

sed ‘1-2d‘ /etc/fstab  表示显示偶数行(因为奇数行被删除了)

p:表示显示“B地”的内容

sed  ‘1~2p‘  /etc/fstab    表示奇数行显示两遍

sed  -n ‘1~2p‘ /etc/fstab   表示只显示奇数行  -n的意思是只保留编辑的行为

a\text:指定的模式匹配到的行的后边追加“text",支持使用\n这个符号,实现多行追加

i\text:在指定的模式匹配到的行前边插入"text",支持使用\n这个符号,实现多行追加

例如: sed ‘5i \do it yourself‘ /etc/fstab   (我把fstab第一行的空格删除了所以是下边的效果)

#
# /etc/fstab
# Created by anaconda on Wed Dec 30 06:43:45 2015
#
do it yourself
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

sed ‘5a \do it yourself‘ /etc/fstab

#
# /etc/fstab
# Created by anaconda on Wed Dec 30 06:43:45 2015
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
do it yourself
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

如果想在多行下边或者上边插入信息,可以用下操作

sed ‘/UUID/a \#I will do my best.‘ /etc/fstab

#
# /etc/fstab
# Created by anaconda on Wed Dec 30 06:43:45 2015
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=42725ac6-787d-4be4-a766-a4b9325eba7e /                       ext4    defaults        1 1
#I will do my best.
UUID=ec7cf699-9e55-4305-a463-859f8ba83f3b /boot                   ext4    defaults        1 2
#I will do my best.
UUID=52937bf3-72c9-48d7-a05c-72726731c995 swap                    swap    defaults        0 0
#I will do my best.

可以看出/UUID/=5

c \text:把匹配到的行替换为此处指定的文本"text‘ 注意:是正行替换,不是只替换某个字符。

例如:

sed ‘/UUID/c \#I will do my best.‘ /etc/fstab

#
# /etc/fstab
# Created by anaconda on Wed Dec 30 06:43:45 2015
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
#I will do my best.
#I will do my best.
#I will do my best.

w /PATH/TO/FILE: 把挑选出来的行保存到一个路径下,例如“把不是#号开头的行保存到/tmp/temp里去

sed -n ‘/^[^#]/w  /tmp/temp/new.xx‘  /etc/fstab

[[email protected] temp]# cd /tmp/temp
[[email protected] temp]# ls
etc  files6  new.xx  passwd1  passwd2  passwd3
[[email protected] temp]# cat new.xx
UUID=42725ac6-787d-4be4-a766-a4b9325eba7e /                       ext4    defaults        1 1
UUID=ec7cf699-9e55-4305-a463-859f8ba83f3b /boot                   ext4    defaults        1 2
UUID=52937bf3-72c9-48d7-a05c-72726731c995 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

r /PATH/FROM/SOMEFILE: 合并文件用的~! 此选项的意思是把另外一个文件读取后存放在sed目标文件制定的行处 例如我们把/etc/isssue文件读取出来放在fstab文件的第三行下边

sed ‘3r /etc/issue‘ /etc/fstab

#
# /etc/fstab
CentOS release 6.7 (Final)
Kernel \r on an \m
# Created by anaconda on Wed Dec 30 06:43:45 2015
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=42725ac6-787d-4be4-a766-a4b9325eba7e /                       ext4    defaults        1 1
UUID=ec7cf699-9e55-4305-a463-859f8ba83f3b /boot                   ext4    defaults        1 2
UUID=52937bf3-72c9-48d7-a05c-72726731c995 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

= :为每一个能匹配到的行加一个行号 使用方法:sed ‘/^UUID/= ‘ /etc/fstab

9
UUID=42725ac6-787d-4be4-a766-a4b9325eba7e /                       ext4    defaults        1 1
10
UUID=ec7cf699-9e55-4305-a463-859f8ba83f3b /boot                   ext4    defaults        1 2
11
UUID=52937bf3-72c9-48d7-a05c-72726731c995 swap                    swap    defaults        0 0

!  : 表示取反  例如”fstab文件中删除所有以不是#开头的行。

sed  ‘/^#/!d‘ /etc/fstab

#
# /etc/fstab
# Created by anaconda on Wed Dec 30 06:43:45 2015
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#

s///:查找替换,其分隔符可以自行指定,比如s$$$ [email protected]@@@ 等

替换标记:

g:全局替换

w: /PATH/TO/IILE : 将替换成功的结果保存到指定的文件中

p:显示替换成功的行

例如: sed ‘[email protected]^[[:space:]]@@‘ /PATH/TO/FILE  后两个@@之间表示为空

sed 就说这些把。。祝你学习愉快,也祝我学习愉快

时间: 2024-10-17 03:49:09

sed命令细说的相关文章

mysqlbinlog结合sed命令恢复update时未加where条件之前的数据

一.环境说明 腾讯云机器上自建MySQL 上update操作时,忘加where条件 ,使用mysqlbinlog搭配sed命令完美还原MySQL版本号:5.6.39:mysql必须开启binlog,并且mysql的binlog最好是Row模式;mysql数据库指定字符集位utf8,同时表的字符集也得为utf8,否则在mysqlbinlog 解析出来的sql文件对于中文汉字的会出现乱码,导致最后恢复数据到线上的表中报错.满足以上条件这样可以极大的保证数据恢复的几率.当然把控好数据库的权限问题,禁止

学习笔记之sed命令使用

一.概述 1.  sed 全称为Stream Editor,就是行编辑器,意味着一次只处理一行文本,sed将被匹配到            的行放到自己特定的空间(通常称为模式空间)中进行编辑:然后再根据结果进行输出显示: 2.  在sed中还有一段空间称为保持空间,sed模式空间中的内容可以与保持空间的内容可以进            行自由互换,实际工作中用处很少,仅作参考: Sed工作流程如图 二.sed命令使用 sed [OPTION]... 'script' [input-file].

sed命令

文本处理三剑客: grep, egrep, fgrep:文本过滤器 sed:Stream EDitor,流编辑器,行     pattem space:模式空间.(基础)     hold space:保持空间 awk:文本格式化工具,报告生成器 语法 sed [OPTION]...  'script'  [input-file] ... script:     地址定界编辑命令         :%s/ 常用选项: -n:不输出模式空间中的内容至屏幕: -e script, --express

sed命令及vim的末行命令

sed:StreamEDitor,流编辑器,以行为单位对一个或多个文件进行编辑处理:每一次sed都会处理给定文件中的一行内容. 在sed处理文本时,将正在处理的当前行存储到临时的缓冲区中,称为"模式空间":用当前行去匹配给定的PATTERN,如果能匹配,则使用command编辑处理:如果不匹配,则默认输出至标准输出:然后继续处理下一行,直到文件的末尾. 默认情况下,sed的所有处理行为不会影响源文件的内容: 我们一般会使用sed命令来自动编辑一个或多个文件,简化对文件的循环操作: se

sed命令总结

在编写shell脚本的过程中,我们经常需要使用sed流编辑器和awk对文本文件进行处理. 什么是sed? sed是一种在线编辑器,它一次处理一行内容.sed是非交互式的编辑器.它不会修改文件,除非使用shell重定向来保存结构.默认情况下,所有的输出行都被打印到屏幕上. sed的处理过程是什么? sed编辑器逐行处理文件(或输入),并将结果发送到屏幕.具体过程如下:首先sed先把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上.sed每

linux sed命令详解

Linux环境:Ubuntu16.04 sed命令 http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html http://blog.csdn.net/yiqingnian28/article/details/23133043 正则表达式 http://blog.csdn.net/wzzfeitian/article/details/8842371 sed -help 查看sed的用法 -n, --quiet, --sile

Linux的sed命令

一.初识sed 在部署openstack的过程中,会接触到大量的sed命令,比如 # Bind MySQL service to all network interfaces.sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf 那么这条命令是什么意思?接下来介绍sed命令答案自然就揭晓了.二.sed简介 sed:是一个编辑器,是一个强大的文件处理工具. sed作用:用来替换.删除,更新文件中的内容.sed能自动处理一个或多个文件. sed原理:sed

Linux三剑客之sed命令

选定行的范围:,(逗号) 删除操作:d命令 显示模式空间内容 追加(行下):a\命令 插入(行上):i\命令 退出:q命令 多点编辑:e命令 从文件读入:r命令 写入文件:w命令 替换操作:s命令 替换文本中的字符串: 全面替换标记g 保持和获取:h命令和G命令 保持和互换:h命令和x命令 sed 简介 sed 工作原理 命令格式 常用选项: 地址定界: 编辑命令: 替换标记: sed元字符集(正则表达式) 高级编辑命令: sed用法实例 作业: 作业: sed命令 sed 简介 Stream

sed命令应用详解

sed应用详解 sed是文本处理处理工具"三大剑客"之一,它 是一种流编辑器,sed一次只处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.sed不会修改原文件内容,除非你使用重定向存储输出.sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等. 用法:sed [OPTION]