文本处理三剑客之 sed
sed:文本流编辑器
主要是对文件的快速增删改查,查询功能中最常用的是过滤,取行
sed [选项] [sed内置命令字符] [输入文件]
Options:
-n:取消默认的sed输出,常与sed内置命令p连用
sed -n '/要过滤的内容/或者行号p'
-e:直接在命令行界面进行sed动作编辑,多点编辑
-r:使用扩展的正则表达式
-i:直接修改读取的文件内容,而不是由屏幕输出。若是不加此参数,就只是修改内存中的数据,不影响磁盘中的数据
script:
地址定界:
1、不给地址,对全文进行处理
2、单地址,
#:指定的行
/pattern/:被此处模式所能够匹配到的每一行
地址范围:
#,#:从#到#之间的行,包括##
#,+#:从#行到#+#行
/pat1/,/pat2/:匹配第一次被模式一和第一次被模式二匹配的行之间的行,贪婪模式!!!
#,/par1/:第#行到第一次被part1匹配的行
编辑命令:
d:删除模式空间匹配的行
sed '3d' file.txt # 数字表示行号
sed '3,4d' file.txt # 3-4行删除
p:显示模式空间中的内容
sed -n '2p' file.txt # 匹配第二行内容,如果不加-n,会将匹配的内容输出到屏幕两次
sed -n '2p;4p' person.txt 2和4行
sed -n '/xiaolizi1/p;/xiaolizi2/p' person.txt
a[\]text:在指定行的后面追加文本,可使用\n实现多行追加
# 在第二行后追加内容
sed '2a 要追加的内容' file.txt
# 追加多行内容
sed '2a 要追加的内容\n要追加的内容' file.txt
sed '$a 106,xiaolizi1\n107,xiaolizi2' person.txt # 在最后一行追加两行内容 $表示结尾
i[\]text:在指定行的前面追加文本
c[\]text:替换行为单行或多行文本
w /path/somefile:保存模式空间匹配的行到指定文件
r /path/somefile:读取指定的文件的文本至模式空间匹配到的行的行后
=:为模式空间中的行打印行号
!: 对模式空间匹配的行取反处理
查找替换:
s///:支持使用其他分隔符:s@@@,s### ...
sed 's#替换前的内容#替换后的内容#g' file.txt # g表示整个文本内容,也就是全局替换,如果不添加,只会替换第一个匹配到的内容 # 关于反向引用
[root@oldgirl ~]# #echo 123456 ==》 <123456> # 转换成此类格式的 \1表示引用前面第一个括号内的内容
[root@oldgirl ~]# echo 123456|sed -r 's#(.*)#<\1>#g'
<123456>
[root@oldgirl ~]# #echo 123456 ==》<1><2><3><4><5><6>
[root@oldgirl ~]# echo 123456|sed -r 's#([1-6])#<\1>#g'
<1><2><3><4><5><6>
[root@oldgirl ~]# echo 123456|sed -r 's#(.)#<\1>#g'
<1><2><3><4><5><6>
[root@oldgirl ~]# echo 123456|sed -r 's#.#<&>#g'
<1><2><3><4><5><6>
[root@oldgirl ~]# echo 123456|sed -r 's#.*#<&>#g'
<123456>
# 举个栗子
# 需求将oldboy*.jpg图片变为avi扩展名文件
# 第一个里程:找出要替换的文件信息
[root@oldgirl ~]# ls oldboy*.jpg
oldboy01.jpg oldboy03.jpg oldboy05.jpg oldboy07.jpg oldboy09.jpg
oldboy02.jpg oldboy04.jpg oldboy06.jpg oldboy08.jpg oldboy10.jpg
[root@oldgirl ~]# ls oldboy*.jpg|sed 's#.*#&#g'
oldboy01.jpg
oldboy02.jpg
oldboy03.jpg
oldboy04.jpg
oldboy05.jpg
oldboy06.jpg
oldboy07.jpg
oldboy08.jpg
oldboy09.jpg
oldboy10.jpg
# 第二个里程:拼凑批量修改文件的命令
[root@oldgirl ~]# ls oldboy*.jpg|sed 's#.*.jpg#&#g'
oldboy01.jpg
oldboy02.jpg
oldboy03.jpg
oldboy04.jpg
oldboy05.jpg
oldboy06.jpg
oldboy07.jpg
oldboy08.jpg
oldboy09.jpg
oldboy10.jpg
[root@oldgirl ~]# ls oldboy*.jpg|sed -r 's#(.*)jpg#\1#g'
oldboy01.
oldboy02.
oldboy03.
oldboy04.
oldboy05.
oldboy06.
oldboy07.
oldboy08.
oldboy09.
oldboy10.
[root@oldgirl ~]# ls oldboy*.jpg|sed -r 's#(.*)jpg#mv \1jpg#g'
mv oldboy01.jpg
mv oldboy02.jpg
mv oldboy03.jpg
mv oldboy04.jpg
mv oldboy05.jpg
mv oldboy06.jpg
mv oldboy07.jpg
mv oldboy08.jpg
mv oldboy09.jpg
mv oldboy10.jpg
[root@oldgirl ~]# ls oldboy*.jpg|sed -r 's#(.*)jpg#mv \1jpg \1avi#g'
mv oldboy01.jpg oldboy01.avi
mv oldboy02.jpg oldboy02.avi
mv oldboy03.jpg oldboy03.avi
mv oldboy04.jpg oldboy04.avi
mv oldboy05.jpg oldboy05.avi
mv oldboy06.jpg oldboy06.avi
mv oldboy07.jpg oldboy07.avi
mv oldboy08.jpg oldboy08.avi
mv oldboy09.jpg oldboy09.avi
mv oldboy10.jpg oldboy10.avi
# 第三里程碑:将命令输出的信息,进行执行
[root@oldgirl ~]# ls oldboy*.jpg|sed -r 's#(.*)jpg#mv \1jpg \1avi#g'|bash
[root@oldgirl ~]# ls oldboy*.avi
oldboy01.avi oldboy03.avi oldboy05.avi oldboy07.avi oldboy09.avi
oldboy02.avi oldboy04.avi oldboy06.avi oldboy08.avi oldboy10.avi
# 以上只是一个需求,为了演示反向引用,如果批量重命名的话,使用rename即可
替换标记:
g:行内全局替换
p:显示替换成功的行
w file:将替换成功的行保存至文件中
+ g:[address[,address]]g 将hold space中的内容拷贝到pattern space中,原来pattern space里的内容清除
+ G:[address[,address]]G 将hold space中的内容append到pattern space\n后
+ h:[address[,address]]h 将pattern space中的内容拷贝到hold space中,原来的hold space里的内容被清除
+ H:[address[,address]]H 将pattern space中的内容append到hold space\n后
+ d:[address[,address]]d 删除pattern中的所有行,并读入下一新行到pattern中
+ D:[address[,address]]D 删除multiline pattern中的第一行,不读入下一行
PS:不论是使用G、g还是H、h,它们都是将hold space里面的内容“copy”到patt
h: 把模式空间中的内容覆盖至保持空间中
H:把模式空间中的内容追加至保持空间中
g: 从保持空间取出数据覆盖至模式空间
G:从保持空间取出内容追加至模式空间
x: 把模式空间中的内容与保持空间中的内容进行互换
n: 读取匹配到的行的下一行覆盖至模式空间
N:读取匹配到的行的下一行追加至模式空间
d: 删除模式空间中的行
D:删除当前模式空间开端至\n的内容(不再传至标准输 出),放弃之后的命令,但是对剩余模式空间重新执行sed
文本处理三剑客之 sed的更多相关文章
- 文本处理三剑客之sed命令
第十八章.文本处理三剑客之sed命令 目录 sed介绍 sed命令常用选项 sed常用编辑命令 sed使用示例 sed高级语法 18.1.sed简介 sed全名stream editor,流编辑器,s ...
- 文本处理三剑客之 Sed ——一般编辑命令
sed简介 sed (stream editor for filtering and transforming text) 是Linux上的文本处理三剑客之一,另外两个是grep和awk. sed又称 ...
- Linux文本处理三剑客之sed
推荐新手阅读[酷壳]或[骏马金龙]开篇的教程作为入门.骏马兄后面的文章以及官方英文文档较难. [酷壳]:https://coolshell.cn/articles/9104.html [骏马金龙-博客 ...
- 文本处理三剑客之sed
sed 1.简介 sed是一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(patternspace),接着用sed命令处理缓冲区中的内 ...
- 文本处理三剑客之 sed详解
1.简介 sed是非交互式的编辑器,它不会修改文件,除非使用shell重定向来保存结果.默认情况下,所有的输出行都被打印到屏幕上. sed编辑器逐行处理文件(或输入),并将结果发送到屏幕.具体过程如下 ...
- 文本处理三剑客之 Sed ——高级编辑命令
本篇介绍sed的高级编辑命令 高级编辑命令 P:打印模式空间开端至\n内容,并追加到默认输出之前 n: 读取匹配到的行的下一行覆盖至模式空间 N:读取匹配到的行的下一行追加至模式空间 h: 把模式空间 ...
- 4.shell编程-文本处理三剑客之sed
4.1.sed的选项 sed,流编辑器.对标准输出或文件进行逐行处理. 语法格式 第一种:stdout | sed [option] "pattern command" 第二种:s ...
- Linux 文本处理三剑客之grep
文本处理都要使用正则表达式,正则表达式有: 基本正则表达式:grep或者egrep -G 扩展正则表达式:egreo或者grep -E Linux 文本处理三剑客: sed:stream editor ...
- shell脚本之正则表达和文本处理(文本处理三剑客:1、grep 2、sed 3、awk)
文本处理三剑客:1.grep 2.sed 3.awk 一.grep:(过滤) grep的使用,主要的参数有: -n :显示行号:-o :只显示匹配的内容-q :静默模式,没有任何输出,得用e ...
随机推荐
- LeetCode 527---Word Abbreviation
527. Word Abbreviation Given an array of n distinct non-empty strings, you need to generate minimal ...
- 企业实施ERP的先后步骤,你真的了解吗?
信息化是我国加快实现工业化和现代化的必然选择.坚持以信息化带动工业化,以工业化促进信息化,在国民经济和社会领域广泛采用信息技术.国民经济信息化中企业的信息化工作是基础, ERP管理系统是IT技术和先进 ...
- the cause of StringBuild class
如果我们对字符串进行拼接操作,每次拼接,都会创建一个新的String对象,既耗时,又浪费空间,而StringBuild类可以解决这个问题. 那么StringBuild类是如果解决的呢? 因为Strin ...
- 关于wp-autopost不能连续采集的问题,这里有解决方案
经常采集一页两页就停下来了 完整的解决方案如下: php.ini 中 max_execution_time = 0 的设置只针对PHP本身起作用php-fpm 模式下 需要修改的参数是 php-fpm ...
- log4j.properties 配置示例
需要的jar如下: !-- log4j --> <dependency> <groupId>log4j</groupId> <artifactId> ...
- 混淆矩阵(Confusion matrix)的原理及使用(scikit-learn 和 tensorflow)
原理 在机器学习中, 混淆矩阵是一个误差矩阵, 常用来可视化地评估监督学习算法的性能. 混淆矩阵大小为 (n_classes, n_classes) 的方阵, 其中 n_classes 表示类的数量. ...
- Linux系统管理员命令:sudo
sudo是个统管一切的命令.它的字面意思是代表“超级用户才能做!”(super user do!)对Linux系统管理员或高级用户而言,它是必不可少的最重要的命令之一.你可曾有过这样的经历:在终端中试 ...
- 配置nginx官网yum源
由于yum源中没有我们想要的nginx,那么我们就需要创建一个“/etc/yum.repos.d/nginx.repo”的文件,其实就是新增一个yum源 二.添加nginx.repo 文件: [roo ...
- python-面向过程编程
面向过程: 核心是过程.过程指的是解决问题的步骤,设计一条流水线,机械式的思维方式. 优点:复杂的问题流程化,进而简单化
- Linux setenforce命令详解[SeLinux操作]
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统. 关闭SELinux 临时生效: 命令临时 ...