sed基础
sed 文本流编辑的 行编辑器
hold space :保持空间。仓库,半成品
一次从文件中读取一行,放到自己编辑的内存缓冲空间即模式空间,不会编辑原文件;根据所给定的命令在模式空间中做编辑处理,处理结果默认输出到显示屏
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
常用选项:
-n :不输出模式空间中的内容至屏幕
-e : 多点编辑 一个sed中实现多个编辑操作
-f :/PATH/TO/SCRIPT_FILE :从指定文件中读取编辑脚本
-r :支持使用扩展表达式,默认expr
-i :原处编辑即修改原文件 注慎用先备份
一、地址定界:
a) 不给地址:对全文进行处理
# sed 'd' /etc/passwd
b) 单地址:
# : 指定的行
sed '5d' /etc/passwd
/pattern/ :被此处模式所能够匹配到的每一行
sed '/^#/d' /etc/fstab
c) 地址范围:
d) $ (^$ 、^[[:space:]]*$)
删除某文件中的空行
sed '/^$/d' /tmp/fstab
删除某文件中空白行
sed '/^[[:space:]]*$/d' /tmp/fstab
e) ! 表示方法:地址定界! 取反条件
删除地址界定的行
sed '/^UUID/d' /etc/fstab 删除非地址界定的行
sed '/^UUID/!d' /etc/fstab
f) ~ 步进
奇数行
sed -n '1~2p' /tmp/fstab
sed '2~2p' /tmp/fstab 偶数行
sed -n '2~2p' /tmp/fstab
sed '1~2p' /tmp/fstab
二、编辑命令:
d : 删除范围内的行
删除地址范围内的行
sed '/^UUID/d' /tmp/fstab
sed '1.3d' /tmp/fstab
p : 打印当前模式空间中的内容
sed 'p' /tmp/fstab
每一行会显示2遍,因为sed默认打印模式空间中的内容,符合条件的内容又打印一遍。
sed -n 'p' /tmp/fstab
仅显示符合条件的行
sed -n '/^UUID/p' /tmp/fstab
sed -n '1p' /tmp/fstab
a \'text' 在地址界定行的下一行追加(append)文本
支持换行追加:\n
在某文件第一行之后添加
sed '1a \hello ' /tmp/fstab 在某文件的1到3行每一行追加文本
sed '1,3a \hello ' /tmp/fstab [root@localhost tmp]# sed -n '/^UUID/a \hello \nHow are you ? ' /tmp/fstab
hello
How are you ?
i \'text' 在地址界定行的上一行插入(insert)文本
支持换行插入:\n
在某文件第一行之上插入
sed '1i \hello ' /tmp/fstab 在某文件的1到3行每一行掺入文本
sed '1,3i \hello ' /tmp/fstab [root@localhost tmp]# sed -n '/^UUID/i \hello \nHow are you ? ' /tmp/fstab
hello
How are you ?
c \'text' 在地址界定的行 替换为text
支持换行替换:\n
替换某文件第一行
sed '1c \hello ' /tmp/fstab 替换某文件的1到3行,为指定的text
sed '1,3c \hello ' /tmp/fstab [root@localhost tmp]# sed -n '/^UUID/c \hello \nHow are you ? ' /tmp/fstab
hello
How are you ?
w /PATH/TO/SOMEFIE 将地址界定的行,保存至/PATH/TO/SOMEFIE中
sed '/^UUID/w /tmp/a.txt ' /tmp/fstab sed -n '/^UUID/p' /etc/fstab > b.txt
r /path/to/somefile :读取指定文件的文本流至模式空间中匹配到的行的行后
将某文件中的内容插入至指定文件中
sed '/^UUID/r /etc/issue' /etc/fstab
sed '1,3r /etc/centos-release' /etc/issue #多行插入文本时,在其后插入
= :为模式空间中的行打印行号
编号:在匹配到的行,上面编号 sed '/^UUID/=' /tmp/fstab
sed '=' /tmp/fstab
s/// : 支持使用其它分隔符,或使用s@@@ 、s### 、s||| 、s,,
替换标记 :
g 全局替换
p : 显示替换成功的行
w /PATH/TO/SOMEFILE : 将替换成功的结果保存至指定文件中
i : 忽略pattern的字符大小写
sed -n 's/r..t/&er/p' /etc/passwd #此处“&”代表引用前面的“r..t”
# sed 's,,,w /PATH/TO/SOMEFILE' FILE
# sed 's,,,' FILE > /PTH/TO/SOMEFILE
[root@localhost bin]# head -n 1 < /etc/passwd | sed 's,rOOt,ROOT,gi'
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
向后引用:
正则表达式引擎将 括号中模式匹配到的内容 记录至内置特殊变量中 \1 \2 \3 ....
s/([a-z]*([^/]+))
\1 此处例子代表[a-z]*[^/]+ 所匹配到内容
\2 [^/]+ 所匹配到的内容
基本正则表达式:\(\)
扩展正则表达式:()
练习1:删除/boot/grub/grub.conf文本中所有以空白开头的行行首的空白字符
sed 's@^[[:space:]]\+@@' /tmp/grub.conf
CentOS :
# cp /etc/grub2.cfg /tmp/grub2.cfg
# sed -i 's,^[[:space:]]\+,,' /tmp/grub2.cfg
练习2:删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
sed 's@^#[[:space:]]\+@@' /tmp/fstab
sed -i -r 's|^#[[:space:]]+||' /tmp/fstab
练习3:echo 一个绝对路径给sed命令:取出其基名,取出目录名
目录
echo /etc/fstab | sed 's@[^/]\+/\?$@@'
基名
echo /etc/fstab | sed -r 's@(.*/)@@'
[root@localhost tmp]# echo /etc/fstab | sed -r 's@(.*/)([^/]+$)@\2@'
三、高级编辑命令:(不常用)
模式空间(pattern) 保持空间(hold space)
注:保持空间不会做任何处理
------》to hold
h :把模式空间中的内容覆盖至保持空间中;
H:把模式空间中的内容追加至保持空间中;
get《-----
g :从保持空间取出数据覆盖至模式空间;
G :从保持空间取出内容追加至模式空间;
x <----->将模式空间中的内容与保持空间的中内容进行互换
n 匹配到的行 在处理时,将其下一行覆盖至模式空间中
N 匹配到的行 在处理时,将其下一行追加至pattern
d 匹配到的行 处理时,删除模式空间中的单行;
D 删除多行模式空间中的多行
sed -n 'n,p' FILE 显示偶数行 sed 'n;d' FILE 显示奇数行
tac FILE 逆向显示文件内容
sed '1!G;h;$!d' FILE 逆向显示文件内容
sed -n '1!G;h;$p' FILE
sed '$!N;$!D' FILE <==> tail -2 FILE 显示文件最后两行
sed '$!d' FILE 取出文件最后一行
每一行后添加一个空白行
sed 'G' FILE sed 'a\ ' '' FILE
sed 'g' FILE 全部替换为空白行
sed '/^$/d;G' FILE 删除多个空白行,在每个行后添加一个空白行
sed基础的更多相关文章
- linux之sed基础命令详解
sed (Stream EDitor)是一个强大的字符流编辑器,输入一般是来自文件,默认情况下不编辑原文件,仅对模式空间中的数据作处理;而后,将模式空间打印到屏幕显示 sed基础用法 sed [op ...
- 文本三剑客---sed 基础
sed编辑器被称作流编辑器(stream editor),和普通的交互式文本编辑器恰好相反.在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式的插入.删除或者替换数据中的文本.流编辑器则会自 ...
- linux之 sed 基础
转载:https://www.cnblogs.com/chensiqiqi/p/6382080.html sed 介绍 Sed命令是操作,过滤和转换文本内容的强大工具.常用功能有增删改查(增加,删除, ...
- Linux中sed基础
sed是一种流编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern spac ...
- sed基础语法
sed 太强大了 参考博客如下:https://www.cnblogs.com/ctaixw/p/5860221.html sed: Stream Editor文本流编辑,sed是一个“非交互式的”面 ...
- 文本处理工具——sed基础
一sed介绍 三剑客是grep,sed,awk,功能都很强大. 其中sed是Stream EDitor,流编辑器 行,编辑器的简写,它一次处理一行内容. sed的强大在于可以对文件进行修改,很适合在脚 ...
- sed的基础应用
sed是一个非交互式的文本编辑器:sed一行一行的处理文件 sed有模式空间(主要活动空间)和缓存空间(辅助空间)两个空间: 模式空间(pattern space)将文件中的一行内容读取到临时缓冲区( ...
- 关于sed用法
sed处理流程 sed的处理流程,简化后是这样的: 1.读入新的一行内容到缓存空间: 2.从指定的操作指令中取出第一条指令,判断是否匹配pattern: 3.如果不匹配,则忽略后续的编辑命令,回到第2 ...
- SED入门
使用Linux多年,SED和AWK两大神器却始终无法得心应手的来提高自己的工作效率,每每需要查找替换,都要依赖于ST2等一众图形工具,深感愧疚,乃专门抽时间学习之,志在使之真正成为左右手. SED ...
随机推荐
- 数据库及MySQL基础(1)
1.数据库概述 关系型数据库:面对关系,Java面向对象. ·常见数据库 Oracle(神喻):甲骨文 DB2:IBM SQL Server:微软 Sybase:赛尔斯 MySQL:甲骨文,最早是开源 ...
- JS OOP 概述
JS面向对象,大致内容 1.面向对象的基础 2.深入认识JS的函数 3.JS类的实现 4JS中共有成员,私有成员和静态成员 5.JS的反射 6.JS的继承 7.JS实现抽象类 8.JS事件设计模式 9 ...
- .NET Core使用swagger遇到的坑
今天突然点开写好的接口,突然发现展开时同时展开了两个接口.如图 我点这两个接口任意一个,这两个都会同时展开或折叠. 原因是他们actinName相同,虽然在vs里面只要http方法不同,action是 ...
- vue引入警告:There are multiple modules with names that only differ in casing. This can lead to unexpected behavior when compiling on a filesystem with other case-semantic. Use equal casing. Compare these
在写vue项目的时候 当我使用 : import dataSource from '../overseaProduct/house/dataSource'; 引入dataSource文件的时候:控制台 ...
- nexus 匿名用户的问题。
为了做到安全和不浪费我们自己的服务器资源,要绝对拒绝匿名用户进行访问: 1,不允许匿名用户访问 2,禁用匿名的账号 以下是这2点的设置图. ============================== ...
- 使用vue国际化中出现内置的组件无法切换语言的问题(element-ui、ivew)
在main.js中引入对应组件的语言包 eg: import VueI18n from 'vue-i18n'; // 引入国际化 import elementEn from 'element-ui/l ...
- Oracle创建上下文 SYS_CONTEXT
Oracle创建上下文 SYS_CONTEXT 1. 系统默认的一些参数 set heading offselect SYS_CONTEXT('USERENV', 'TERMINAL') termin ...
- nginx环境依赖
安装nginx所必需的的依赖环境 yum -y install pcre pcre-devel yum -y install zlib zlib-devel yum -y install zlib z ...
- idou老师教你学Istio 15:Istio实现双向TLS的迁移
在Istio中,双向TLS是传输身份验证的完整堆栈解决方案,它为每个服务提供可跨集群的强大身份.保护服务到服务通信和最终用户到服务通信,以及提供密钥管理系统.本文阐述如何在不中断通信的情况下,把现存I ...
- 如何判断PHP空间是否支持curl、gzip等功能
在网站根目录新建v.php,输入以下代码: <?php $f=@trim($_GET['f']); if(function_exists($f)) echo '支持'.$f; else echo ...