bash编程-sed
sed(Stream Editor)是Linux系统下的一个文本流编辑器,它将文本文件内容逐行读取到标准输出,并将此行内容写入模式空间(pattern space),然后按照给定的地址定界和命令处理匹配到的行,处理后的内容交给标准输出。
sed除了模式空间,还能够操作保持空间,保持空间可以理解为类似剪切板的一个暂存区域,模式空间和保持空间之间的内容都可以进行追加、覆盖等操作,两个内存空间结合使用可以实现各种强大的文本处理。
sed工具的处理操作不会修改原文件,除非使用了-i选项或输出从定向指定输出到文件。
SYNOPSIS
sed [options] 'script' file...
OPTIONS
-n:仅显示script处理后的结果;
-e script, --expression=script:连接多个script(每个script前都要加-e);
-f script-file:从文件中读取script
-r, --regexp-extended:支持使用扩展正则表达式;
-i[SUFFIX], --in-place[=SUFFIX]:直接编辑原文件 ;
-h:显示帮助
SCRIPT
sed命令中的script包行两部分:地址定界和编辑命令,地址定界用于指定需要处理的行,并且可以匹配模式(pattern);编辑命令用于指定对匹配到的内容作何处理,如输出、替换、删除等等。
# 地址定界
(1) 空地址(即编辑命令前没有指定地址定界):对全文进行处理;
(2) 单地址:
n:第n行;
/pattern/:被此模式所匹配到的每一行;
$:最后一行;
(3) 地址范围
m,n:第m行至第n行;
m,+n:第m行向后n行;
n,/pattern/:第n行至第一次匹配到模式的行;
/pat1/,/pat2/:第一次匹配到两个模式的行之间的行
(4) 步进:~
m~n:第m行开始,每隔n行
1~2:1,3,5,7...行,即所有奇数行
2~2:2,4,6,8...行,即所有偶数行
# 编辑命令(多个命令可以用;分隔表示依次执行多个命令)
d:删除;
p:输出;
a \text:在行后面追加文本“text”,支持使用\n实现多行追加;
i \text:在行前面插入文本“text”,支持使用\n实现多行插入;
c \text:将匹配到的行替换为指定的文本“text”;
w filename:保存模式空间匹配到的行至指定的文件中;
W filename:保存模式空间匹配到的第一行至指定的文件中;
r filenem:读取指定文件的内容至当前文件被模式匹配到的行后面;文件合并;
=:为模式匹配到的行打印行号;
!:地址定界条件取反(用在地址定界之后:地址定界!编辑命令);
s///:查找替换,其分隔符可自行指定,常用的有s@@@, s###等;
【替换标记】
g:全局替换;
w filename:将替换成功的结果保存至指定文件中;
p:显示替换成功的行;
# 高级编辑命令:
h:把模式空间中的内容覆盖至保持空间中;
H:把模式空间中的内容追加至保持空间中;
g:把保持空间中的内容覆盖至模式空间中;
G:把保持空间中的内容追加至模式空间中;
x:把模式空间中的内容与保持空间中的内容互换;
n:覆盖读取匹配到的行的下一行至模式空间中;
N:追加读取匹配到的行的下一行至模式空间中;
d:删除模式空间中的行;
D:删除多行模式空间中的所有行;
示例
# 1.准备测试的文本文件
[root@VM_41_201_centos ~]# cat << EOF > /tmp/sed.test
A.这是第1行AA
B.这是第2行BB
C.这是第3行CC
D.这是第4行DD
E.这是第5行EE
F.这是第6行FF
EOF
# 2.输出第4行至最后一行(未使用-n:原文件所有内容会输出,指定的行会再次输出)
[root@VM_41_201_centos ~]# sed '4,$p' /tmp/sed.test
A.这是第1行AA
B.这是第2行BB
C.这是第3行CC
D.这是第4行DD
D.这是第4行DD
E.这是第5行EE
E.这是第5行EE
F.这是第6行FF
F.这是第6行FF
# 3.输出第4行至最后一行(使用-n:原文件内容不会输出,仅输出指定的最后一行)
[root@VM_41_201_centos ~]# sed -n '4,$p' /tmp/sed.test
D.这是第4行DD
E.这是第5行EE
F.这是第6行FF
# 4.删除第2行及后3行
[root@VM_41_201_centos ~]# sed '2,+3d' /tmp/sed.test
A.这是第1行AA
F.这是第6行FF
# 5.在以EE结尾的行前插入@@,在以DD结尾的行后追加$$
[root@VM_41_201_centos ~]# sed -e '/EE$/i\@@' -e '/^D/a\$$' /tmp/sed.test
A.这是第1行AA
B.这是第2行BB
C.这是第3行CC
D.这是第4行DD
$$
@@
E.这是第5行EE
F.这是第6行FF
# 6.替换行中第一个匹配的字符
[root@VM_41_201_centos ~]# sed 's/[ABCDEF]//' /tmp/sed.test
.这是第1行AA
.这是第2行BB
.这是第3行CC
.这是第4行DD
.这是第5行EE
.这是第6行FF
# 7.替换行中所有匹配到的字符
[root@VM_41_201_centos ~]# sed 's/[ABCDEF]//g' /tmp/sed.test
.这是第1行
.这是第2行
.这是第3行
.这是第4行
.这是第5行
.这是第6行
# 8.pattern中包含变量时,''需要换成"",并且""中的特殊字符需要转义
[root@VM_41_201_centos ~]# line=3
[root@VM_41_201_centos ~]# echo $line
3
[root@VM_41_201_centos ~]# sed '$line,\$d' /tmp/sed.test
sed:-e 表达式 #1,字符 3:命令后含有多余的字符
[root@VM_41_201_centos ~]# sed "$line,\$d" /tmp/sed.test
A.这是第1行AA
B.这是第2行BB
# 9.显示奇数行
[root@VM_41_201_centos ~]# sed 'n;d' /tmp/sed.test
A.这是第1行AA
C.这是第3行CC
E.这是第5行EE
# 10.显示偶数行
[root@VM_41_201_centos ~]# sed -n 'n;p' /tmp/sed.test
B.这是第2行BB
D.这是第4行DD
F.这是第6行FF
# 11.显示最后2行
[root@VM_41_201_centos ~]# sed '$!N;$!D' /tmp/sed.test
E.这是第5行EE
F.这是第6行FF
# 12.删除原有空白行,并在所有非空白行后添加空白行
[root@VM_41_201_centos ~]# sed '/^$/d;G' /tmp/sed.test
A.这是第1行AA
B.这是第2行BB
C.这是第3行CC
D.这是第4行DD
E.这是第5行EE
F.这是第6行FF
[root@VM_41_201_centos ~]#
# 13.使用保持空间+多个编辑命令实现逆序显示
[root@VM_41_201_centos ~]# sed '1!G;h;$!d' /tmp/sed.test
F.这是第6行FF
E.这是第5行EE
D.这是第4行DD
C.这是第3行CC
B.这是第2行BB
A.这是第1行AA
bash编程-sed的更多相关文章
- bash编程之多分支if 语句及for循环
第十七章.bash编程之多分支if 语句及for循环 if语句三种格式 多分支if语句练习 for循环 17.1.if语句的三种格式 单分支if语句 if condition;then 条件为真执行的 ...
- bash编程总结
bash应该是目前Linux上最流行的shell脚本解释程序了(还有个shell叫dash,我太讨厌这个东东了.),只要你在linux上工作,并且希望自己能够工作得更愉悦,那么你应该熟悉最基本的bas ...
- [shell] Bash编程总结
由于工作需要,之前的几个月写了一些Bash脚本,主要完成自动测试.打包.安装包等.虽然相比C++编程,要简单.傻瓜,但其在类Unix系统中可以大大提高工作的效率.所以在此对脚本编程过程中一些注意事项进 ...
- Linux Bash编程
在Linux系统介绍中,介绍了shell的多个版本,现在的Linux发行版基本都默认使用bash(Bourne Again shell),兼容Bourne shell (sh),本文将简要介绍Bash ...
- Linux中bash编程
bash编程也叫shell编程 预定义变量 $? 最后一次执行的命令的返回状态.如果这个变量的值为0,证明上一个命令正确的执行:如果这个变量返回的值非0(具体是那个数,有命令自己来决定 ...
- bash编程基础
bash变量 变量命名: 1.不能使用程序中的关键字(保留字) 2.只能使用数字.字母和下划线,且不能以数字开头 3.要见名知义 变量类型: 数值型:精确数值(整数),近似数值(浮点型) 字符型:ch ...
- bash编程之循环控制:
bash编程之循环控制: for varName in LIST; do 循环体 done while CONDITION; do 循环体 done until CONDITION; do 循 ...
- bash编程的信号捕获:
bash编程的信号捕获: kill -l KILL无法捕捉: trap 'COMMAND' SIGNAL, 信号捕捉用于:在中途中止时做一些清理操作. 一. trap捕捉到信号之后,可以 ...
- 怎样用 Bash 编程:逻辑操作符和 shell 扩展
学习逻辑操作符和 shell 扩展,本文是三篇 Bash 编程系列的第二篇. Bash 是一种强大的编程语言,完美契合命令行和 shell 脚本.本系列(三篇文章,基于我的 三集 Linux 自学课程 ...
随机推荐
- ubuntu 16.04 安装中文语言包
安装中文语言包 sudo apt-get install language-pack-zh-han* 安装gnome包 sudo apt-get install language-pack-gn ...
- IDEA常用快捷键,收藏以备后用
IntelliJ Idea 常用快捷键列表 Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Sh ...
- canvas 2.0 图片绘制
绘制图片drawImage 2013.02.21 by 十年灯·一条评论 本文属于<html5 Canvas画图系列教程> 这里的绘制图片是指把一张现成的图片,绘制到Canvas上面. 有 ...
- xcode 自动签名原理
签名的核心就是provision profile要与当前的bundle id及本地的私钥相匹配. teamid:每个开发者账号都会对应一个teamid.企业的开发这账号除了对应一个teamid外,下面 ...
- python学习记录
学习python中······· 今天写了个装饰器用来登录用,用户名和密码是存在文件里的,涉及到了装饰器和带参数的装饰器 文件里的内容如下 {"liming": 123456} { ...
- JAVA算术运算符
算术运算符 +.-.*(乘号)./(除号,取商).%(取余数.取模) 特殊的运算符:++(加加).--(减减) int a = 1; a+=10; 等同于a=a+10; a-=5; 等同于a= ...
- eclipse修改工作目录颜色
转载请注明本地址,http://blog.csdn.net/u013173247/article/details/41676495 经常用Eclipse的朋友都应该清楚,Eclipse的白背景不知道晃 ...
- 使用jmail发送短信
原文链接 https://blog.csdn.net/sdaujsj1/article/details/79248469 pom <!-- https://mvnrepository.com/a ...
- ios 在使用 SDWebimage UIButton setBackgroundimage
解决方法 : 有法为此在 SDWebImage: SDWebImage / SDWebImage / UIButton+WebCache.h 导入此文件在您的类: #import <SDWebI ...
- 对hadoop namenode -format执行过程的探究
引言 本文出于一个疑问:hadoop namenode -format到底在我的linux系统里面做了些什么? 步骤 第1个文件bin/hadoop Hadoop脚本位于hadoop根目录下的bi ...