文本处理三剑客之-sed

1.文本处理三剑客-sed

#sed语法:
sed  [OPTION]...  {script-only-if-no-other-script}
       [input-file]...

sed理解:是一种流编辑器,一次处理一行内容,处理时把当前处理的行存储在临时缓存中,成为“模式空间”,接着用sed命令处理缓冲区的内容,处理完毕后吧缓冲区内容输出到屏幕接着处理下一行。这样不断重复到末尾。文件内容并没有改变。除非使用重定向输出才会改变内容。

常用选项

-n 不输出模式空间到屏幕
-e 多点编辑,或
-f 从指定文件中读取编辑脚本
-r 使用扩展表达式
-i 原处编辑

2.sed处理地址范围定界:

1. 不给地址表示对全文处理

2. 单地址 指定行 ‘1‘ 第一行 ;

/ 关键字,可以是正则表达式或其他模糊匹配的符号/

3. 地址范围

‘2,10‘第二行到第十行

’2,+10‘第二行再加10行

/关键字/,/关键字/匹配第一个关键字到第二个关键字之间的内容 ;

4. 步进

’1~2‘奇数行

’2~2’偶数行

3.sed编辑命令

d 删除模式空间匹配到的行

[[email protected] testdir]# sed ‘1d‘ 1
     2	#
     3	# /etc/fstab
     4	# Created by anaconda on Thu Jul 28 17:47:00 2016

p 显示模式空间中的内容

[[email protected] ~]# sed ‘2p‘ /etc/issue
\S
Kernel \r on an \m
Kernel \r on an \m

显示两次的原因因为在模式空间输出一次然后p显示一次,加上-n是表示不输出模式空间到屏幕,如下输出

[[email protected] ~]# sed ‘2p‘ /etc/issue
\S
Kernel \r on an \m

a \添加内容 在匹配行后加入文本 \n多行插入

#实例解释
[[email protected] testdir]# sed -e  /UUID/a\XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -e /UUID/i\ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ  file1
     1
     2	#
     3	# /etc/fstab
     4	# Created by anaconda on Thu Jul 28 17:47:00 2016
     5	#
     6	# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
     7	# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
     8	#
     9	/dev/mapper/centos-root /                       xfs     defaults        0 0
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
    10	UUID=aea23617-8678-414a-bd12-59f03ea9deb0 /boot                   xfs     defaults        0 0
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

i \添加内容  在匹配行后加入文本 \n多行插入

#实例解释
[[email protected] testdir]# sed ‘/^U/i\ZZZZZZZZZZZZZZZZZZZZZ\nNNNNNNNNNNNNNNNNNNNNNN\nssssssssssssssss‘ file3
#输出结果
ZZZZZZZZZZZZZZZZZZZZZ
NNNNNNNNNNNNNNNNNNNNNN
ssssssssssssssss
UUID=aea23617-8678-414a-bd12-59f03ea9deb0 /boot

c \替换内容 替换单行或多行文本

#实例解释,也支持\n换行
[[email protected] testdir]# sed ‘/^U/c\relace‘ file3
#将以U打头的行替换成‘relace’

w /保存新文件路径

[[email protected] testdir]# sed ‘/^U/w /testdir/5‘ file3

r /保存文件路径

[[email protected] testdir]# sed ‘/^U/r /etc/issue‘ file3

= 在模式空间中打印行号

[[email protected] testdir]# sed ‘/^U/=‘ file6

!模式空间匹配到的取反

[[email protected] testdir]# sed ‘/^U/!=‘ file6

#ps:sed文件出是不修改原文件内容的,如果要修改可以使用选项-i

[[email protected] testdir]# sed -i ‘/^U/d‘ 3

修改之前可以将文件进行备份,在-i选项后面添加备份名可以在修改之前备份该文件

[[email protected] testdir]# sed -i.bak ‘/^U/d‘ 3

4.sed搜索替换

s/// 查找替换 支持使用分割符包括[email protected]@@,s### 替换标记;
g:全局替换
p:显示替换成功的行
w 将替换成功的行保存至新文件
#实例操作解释
#1、删除/etc/grub2.conf文件中所有以空白开头的行行首的空白字符
[[email protected] testdir]# sed ‘/^[[:space:]]\+/d‘ /etc/grub2.cfg 
#2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
[[email protected] testdir]# sed ‘s/^#[[:space:]]\+//‘ /etc/fstab
#3、在/root/install.log每一行行首增加#号
[[email protected] ~]# sed -n ‘s/^/#/p‘ /root/install.log
#4、在/etc/fstab文件中不以#开头的行的行首增加#号
[[email protected] ~]# sed ‘s/^[^#]/#/‘ /etc/fstab
#5、处理/etc/fstab路径,使用sed命令取出其目录名和基名
取基名
echo "/etc/fst/sd" | sed -r  ‘[email protected](.*)/([^/]+/?)@\[email protected]‘
echo "/etc/fst/sd" | sed   -r ‘[email protected](.*/)([^/]+/?)[email protected]\[email protected]‘ 
echo "/etc/fst/sd/" | sed  ‘[email protected]*\<@@‘
取目录
echo "/etc/fst/sd/" | sed -r  ‘s#[^/]+/?$##‘
#6、利用sed 取出ifconfig命令中本机的IPv4地址
[[email protected] ~]# ifconfig|sed -n ‘2p‘|sed ‘s/\<B.*//‘|sed ‘s/^.*r:‘//
#7、统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数
[[email protected] Packages]# ls |sed ‘s/.rpm$‘//|sed ‘s/.*\.‘//|sort|uniq -c

5.sed高级应用

首先要了解使用sed两个缓存空间,一个是模式空间,在前面已经说过了

另一个是保持空间

下面几个是sed的高级应用

h: 把模式空间中的内容覆盖至保持空间中

H:把模式空间中的内容追加至保持空间中

g: 从保持空间取出数据覆盖至模式空间

G:从保持空间取出内容追加至模式空间

x: 把模式空间中的内容与保持空间中的内容进行互换

n: 读取匹配到的行的下一行覆盖至模式空间

N:追加匹配到的行的下一行至模式空间

d: 删除模式空间中的行

D:删除当前模式空间开端至\n的内容(不在传至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed

#实例解释以后补充

时间: 2024-10-20 11:50:41

文本处理三剑客之-sed的相关文章

文本处理三剑客之sed

文本处理三剑客之sed sed概述 sed使用示例 sed的高级应用 sed概述 sed, 作为文本三剑客之一,其定位就是一个编辑器, 而且sed是一个流式编辑器(stream editor),其主要功能是过滤和转换文本. sed - stream editor for filtering and transforming text 作为一个强大的文本处理功能,sed 自然能够配合正则表达式,另外,所谓流编辑器,sed 是逐行地读取文本,在文本行中应用指定的命令,且默认输出到stdout; se

文本处理三剑客之sed(流编辑器)

文本处理三剑客之sed(流编辑器) - 行编辑器 把当前处理的行存储在临时缓冲区,称为模式空间,然后把模式空间的内容送往屏幕,一行一行的处理,主要用来编辑一个或者多个文件. - 用法 sed [option]... 'script' inputfile... ###### - 常用选项 -n:不输出模式空间内容到屏幕,即不自动打印 默认会打印模式空间的内容加-n 可以只显示需要打印的行 [root@localhost home]# sed -n '2,3p' /etc/passwd bin:x:

Linux文本处理“三剑客”之sed

sed(Stream Editor)是一个行编辑工具.下面我们介绍 sed 的实现原理和基本使用方法. 一.sed 的处理文本的流程 基本处理流程如下: 处理流程是:每次读入文本文件的一行到内存中的模式空间中,在模式空间中处理后将处理的结果输出,默认会打印到屏幕上.因此,默认情况下,不会改变原文件的内容. 二.sed 命令的使用 基本语法:sed [options]... '地址定位 编辑命令' FILE... 地址定位的方法: 1.行定位: start_line[,end_line] 2.模式

文本工具三剑客:sed

文本工具三剑客:sedsde是一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓存区,称为 模式空间    用法:    sed [选项] [加自己的语言] [要处理的文件]    选项:        -n  不输出模式中的内容至屏幕            # sed -n "10p" f2 只打印出第10行匹配到的行 其他不显示            10  UUID=07a475f4-3d7a-4b27-9ec9-500bc8a19c4d /boot      

Linux 篇 | 文本处理三剑客之SED

文本处理三剑客之SED sed不仅可以像grep过滤文件,查找想要的内容,还可以更改文件,这是grep做不到的. 一.sed介绍 Stream EDitor, 行编辑器 sed是一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.然后读入下行,执行下一个循环.如果没有使诸如'D'的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间.这

文本处理三剑客之-sed基础用法

文本处理三剑客: grep,egrep,fgrep:文本过滤器 sed:stream EDitor:流编辑器,行 awk:文本格式化工具,报告生成器 sed [OPTION]...'script' [input-file]      script:地址定界编辑命令                [option]           -n:不输出模式空间中的内容至屏幕           -e:多点编辑           -f /path/to/sed_script_file:         

8.9_Linux文本处理三剑客之sed和文本编辑利器vim的使用

本文处理三剑客之sed的使用   什么是sed? Stream EDitor(简称sed), 行编辑器,一次只读一行,只处理一行,不对源文件做处理,至输出到屏幕上. sed是一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重定向存储输出.sed主要用来自动编辑一个或多

文本处理三剑客之 Sed &mdash;&mdash;一般编辑命令

sed简介 sed (stream editor for filtering and transforming text) 是Linux上的文本处理三剑客之一,另外两个是grep和awk. sed又称行编辑器,每次读取并处理一行文本. 工作原理 1.sed命令开始执行后 2.先从文本中读取第一行,放在模式空间 (pattern space)中 3.判断这行文本是否符合指定模式,符合则进行编辑,然后把结果输出到标准输出. 4.不符合的话默认也会输出到标准输出.除非特别指定不输出不符合的结果行. 5

文本处理三剑客之sed基本用法

sed:streameditor,意为流编辑器,是类Unix操作系统常见的命令行程序.sed用来把文档或字符串里面的文字经过一系列编辑命令转换为另一种格式输出:sed通常用来匹配一个或多个正则表达式的文本进行处理. sed工作原理: sed维护了两个数据的缓冲空间:模式空间(patternspace)和保留空间(hold space),初始环境都为空: 1.当sed命令对一个文本文件进行处理,逐行读取文本文件进行地址匹配,将匹配到的行放在模式空间中: 2.sed的编辑命令对模式空间中的内容进行编