sed 常见用法_鲁莽的博客-程序员秘密

技术标签: sed  每天都在进步  

                                   常见用法,增删改查

本文为转载,原文地址张耀的博客

  • 增加,插入

     i 插入到指定行

    a 追加到指定行后

 

  • 单行插入

[[email protected] ~]# cat persion.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed  '2i ceshi' persion.txt  #插入到第二行
101,oldboy,CEO
ceshi
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed '2a ceshi' persion.txt  #追加到第二行之后
101,oldboy,CEO
102,zhangyao,CTO
ceshi
103,Alex,COO
104,yy,CFO
105,feixue,CIO

 

  • 多行插入

[[email protected] ~]# sed '2i ceshi\nceshi2' persion.txt   用\n换行符插入多行
101,oldboy,CEO               
ceshi
ceshi2
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed '2a ceshi\nceshi2' persion.txt  
101,oldboy,CEO
102,zhangyao,CTO
ceshi
ceshi2
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed '12a Port 52113\nPermitRootLogin no\nPermitEmptyPasswords no\nUseDNS no\nGSSAPIAuthentication no' sshd_config |grep -nvE "^$"
1:#     $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $
3:# This is the sshd server system-wide configuration file.  See
4:# sshd_config(5) for more information.
6:# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin
8:# The strategy used for options in the default sshd_config shipped with
9:# OpenSSH is to specify options with their default value where
10:# possible, but leave them commented.  Uncommented options change a
11:# default value.
13:Port 52113
14:PermitRootLogin no
15:PermitEmptyPasswords no
16:UseDNS no
17:GSSAPIAuthentication no
18:#Port 22                     用一条命令添加第13-17行,注意此时没有-i参数,文件是没有修改的
  • 指定执行的地址范围

sed软件可以对单行或多行进行处理。如果在sed命令前面不指定地址范围,那么默认会匹配所有行。
用法:n1[,n2]{sed-commands}
地址用逗号分隔的,n1,n2可以用数字、正则表达式、或二者的组合表示。
例子:
   10{sed-commands}        对第10行操作
   10,20{sed-commands}     对10到20行操作,包括第10,20行
   10,+20{sed-commands}   对10到30(10+20)行操作,包括第10,30行
   1~2{sed-commands}       对1,3,5,7,……行操作
                             从第一行开始,等差数列为2的行
   10,${sed-commands}     对10到最后一行($代表最后一行)操作,包括第10行
    /oldboy/{sed-commands}         对匹配oldboy的行操作
    /oldboy/,/Alex/{sed-commands}  对匹配oldboy的行到匹配Alex的行操作
    /oldboy/,${sed-commands}       对匹配oldboy的行到最后一行操作
    /oldboy/,10{sed-commands}      对匹配oldboy的行到第10行操作,注意:如果前10行没有匹配到oldboy,sed软件会显示10行以后的匹配oldboy的行,如果有。
    1,/Alex/{sed-commands}         对第1行到匹配Alex的行操作
    /oldboy/,+2{sed-commands}      对匹配oldboy的行到其后的2行,共计3行进行操作

 

  • 删除

 d 删除指定行

[[email protected] ~]# sed 'd' person.txt
[[email protected] ~]#
[[email protected] ~]# sed '2d' person.txt
101,oldboy,CEO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed '2,5d' person.txt
101,oldboy,CEO
[[email protected] ~]# sed '3,$d' person.txt
101,oldboy,CEO
102,zhangyao,CTO
[[email protected] ~]# sed '1~2d' person.txt
102,zhangyao,CTO
104,yy,CFO
[[email protected] ~]# sed  '1,+2d' person.txt
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed '/zhangyao/d' person.txt
101,oldboy,CEO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed '/oldboy/,/Alex/d' person.txt
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed '/oldboy/,3d' person.txt
104,yy,CFO
105,feixue,CIO

  c 用新行取代旧行

[[email protected] ~]# sed '2c 106,dandan,CSO' person.txt
101,oldboy,CEO
106,dandan,CSO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

s 文本替换  g全局替换

-i  修改文件内容

[[email protected] ~]# sed '2s/10/lumang/g' persion.txt  
101,oldboy,CEO
lumang2,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106
[[email protected] ~]# sed 's/10/lumang/g' persion.txt  
lumang1,oldboy,CEO
lumang2,zhangyao,CTO
lumang3,Alex,COO
lumang4,yy,CFO
lumang5,feixue,CIO
lumang6


sed 's/N1/N2/g'
N1,N2均可以使用变量
N1可以使用正则,N2不能用正则
  • 分组替换\( \)\1的使用说明

sed软件的\( \)的功能可以记住正则表达式的一部分,其中,\1为第一个记住的模式即第一个小括号中的匹配内容,\2第二记住的模式,即第二个小括号中的匹配内容,sed最多可以记住9个。

[[email protected] ~]# ifconfig eth0|sed -nr 's/^.*dr:(.*)  B.*$/\1/gp' 
192.168.111.132
-n 取消默认输出
-r 支持扩展正则,不加-r ,()要转义
's///gp'中的p是打印的意思

-n取消默认输出后,不加p不会输出内容
  •  特殊符号&代表被替换的内容

[[email protected] ~]# sed 's/oldboy/---&---/g' persion.txt 
101,---oldboy---,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

 


sed重命名文件


[[email protected] logs]# ls
stu_102999_1_finished.jpg  stu_102999_3_finished.jpg  stu_102999_5_finished.jpg
stu_102999_2_finished.jpg  stu_102999_4_finished.jpg

[[email protected] logs]# ls|sed -r 's/(.*)_finished.jpg/mv & \1.jpg/g' |bash
[[email protected] logs]# ls
stu_102999_1.jpg  stu_102999_2.jpg  stu_102999_3.jpg  stu_102999_4.jpg  stu_102999_5.jpg

 

p 输出指定内容,但默认会输出2次匹配的结果,因此使用n取消默认输出

 

[[email protected] ~]# sed '2p' persion.txt 
101,oldboy,CEO            
102,zhangyao,CTO           
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106
输出结果不是想要的第二行,而且第二行重复输出
[[email protected] ~]# sed '2p' persion.txt  -n
102,zhangyao,CTO
通常p和-n取消默认输出是一同出现
[[email protected] ~]# sed '2,3p' persion.txt  -n
102,zhangyao,CTO
103,Alex,COO
[[email protected] ~]# sed '2,/yy/p' persion.txt  -n 
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
[[email protected] ~]# sed '/02/,/yy/p' persion.txt  -n 
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
[[email protected] ~]# 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37120573/article/details/82496847

智能推荐

2018-2019 ACM-ICPC, Asia Shenyang Regional Contest C. Insertion Sort(打表找规律)_Sqwlly的博客-程序员秘密

C. Insertion Sort题意:给出n,kn,kn,k,询问nnn的全排列中,有多少个排列在给前kkk个元素排完序后满足最长递增子序列长度大于等于n−1n-1n−1。题解:实际上好像是有公式的。但是我的做法比较蠢。打表肉眼找规律。可以发现当kkk固定不变,nnn递增的时候是有规律的。代码先贴一份打表的int dp[100];int main() {#ifndef ONLINE...

Arcgis实现路线等线方向箭头表示_arcgis让线上箭头位于中间_GIS从业者的博客-程序员秘密

1、准备线数据2、Arcgis的GP工具搜索”在折点处分割线”3、分割之后重新计算ID4、Arcgis的GP工具搜索”线性方向平均值”5、生成6、也可以将线转成中点7、在点上设置方向8、把最初的线设置成有路宽的形式,点设置好箭头,结果就是...

绝对神器,用 SQL查 Linux日志,查询效率高到飞起_zhenfanaz的博客-程序员秘密

最近发现点好玩的工具,迫不及待的想跟大家分享一下。大家平时都怎么查Linux日志呢? 像我平时会用tail、head、cat、sed、more、less这些经典系统命令,或者awk这类三方数据过滤工具,配合起来查询效率很高。但在使用过程中有一点让我比较头疼,那就是命令参数规则太多了,记的人脑壳疼。那查日志有没有一种通用的方式,比如用SQL查询,毕竟这是程序员都比较熟悉的表达式。今天分享的工具q,就实现了以写SQL的方式来查询、统计文本内容,一起看看这货到底有什么神奇之处。搭个环境q是一个

html标题和段落标记,Chap 03 HTML文字与段落标记_阎立夫的博客-程序员秘密

3.1标题字HTML文档中包含有各种级别的标题,各种级别的标题由到元素来定义。其中代表最高级别的标题,依次递减,最低。3.1.1标题字标记h到元素中的字母h是英文headline的简称。作为标题,它们的重要性是有区别的,其中h1标题的重要性最高,h6最低。语法:1级标题2级标题3级标题4级标题5级标题6级标题补充:对于不同的浏览器,其确切的点阵尺寸的大小也不相同,但标题大约是标准文字高度的2到3倍...

解决SAP ABAP dump “LOAD_PROGRAM_CLASS_MISMATCH” 程序版本不匹配的问题。_sap dump 修正_winwhere的博客-程序员秘密

SAP 的程序dump有多种情况,其中一种就是“LOAD_PROGRAM_CLASS_MISMATCH”,意思是在加载程序类的时候不匹配,看其中一个问题的解决步骤。1. 用事务码ST22,找出dump 日志,打看日志,看到运行时错误是:“LOAD_PROGRAM_CLASS_MISMATCH”,2. 在日志中找到“错误分析 ”,里面显示了不匹配的类的名称以及版本号。其中,...

单源最短路径算法——Bellman-ford算法和Dijkstra算法_weixin_30699955的博客-程序员秘密

BellMan-ford算法描述1.初始化:将除源点外的所有顶点的最短距离估计值 dist[v] ← +∞, dist[s] ←0;2.迭代求解:反复对边集E中的每条边进行松弛操作,使得顶点集V中的每个顶点v的最短距离估计值逐步逼近其最短距离;(运行|v|-1次)3.检验负权回路:判断边集E中的每一条边的两个端点是否收敛。如果存在未收敛的顶点,则算法返回false,表明问题无解;否则算法...

随便推点

关于无法注册stackoverflow账号的解决方法_FishSaid的博客-程序员秘密

关于无法注册stackoverflow账号的解决方法在注册stackoverflow账号时发现无法成功,网页提示无法加载所需javascript脚本,具体原因是Google的CDN在天朝基本无法使用╮(╯▽╰)╭。经过一番搜索之后,在github找到了大神写的一个插件,亲测有效,特来分享。此为链接地址 在read.me文件中较为详细的介绍了安装方法,在此就不做赘述。PS:在浏览器添加

ubuntu 20.04 QT添加QChart支持_ubuntu20.04 命令行安装qchart组件_随心而动a的博客-程序员秘密

在使用从github上下载、编译、安装,这个方法之前,可以先试一下软件库自带的版本,sudo apt install libqt5charts5 libqt5charts5-dev在CMakeLists.txt中做如下修改:find_package(Qt5 5.12 COMPONENTS Core Widgets Gui Charts REQUIRED)target_link_libraries(XXX Qt5::Charts)find_package 加上 Chartstarge

【论文阅读】《深度卷积网络下的驾驶检测与分类》_MarToony|名角的博客-程序员秘密

《Driver behavior detection and classification using deep convolutional neural networks》1 简介:目前的方法中,一些是仅考虑驾驶员的行为,还有一些方法是在驾驶员行为的基础上融入了车辆状态和环境信息。目前的研究大多使用深度学习的方法对驾驶员行为进行分类。由于基于相机的系统可能存在侵犯隐私和欺骗的可能性,因而一些研究倾向于使用非视觉信息和传统的学习技术,比如SVM和KNN;CNN已经取得了非常大的成功,但是深度学习技

回文词(Palindromes, UVa401)_做题全AC的博客-程序员秘密

输入一个字符串,判断它是否为回文串以及镜像串。 输入字符串保证不含数字0。 所谓回文串,就是反转以后和原串相同,如abba和madam。 所有镜像串,就是左右镜像之后和原串相同,如2S和3AIAE。 注意,并不是每个字符在镜像之后都能得到一个合法字符。 在本题中,每个字符的镜像如图3-3所示(空白项表示该字符镜像后不能得到一个合法字符)。      输入的每行包含一个字符串(保证只有上

Xilinx ISE14.7安装、联合Modelsim仿真及使用的常见问题_xilinx仿真库编译edk出错_ZHANZHANyy的博客-程序员秘密

Xilinx ISE14.7安装及联合Modelsim仿真常见问题在安装和使用过程中遇到的一些问题,折腾了好久,最后在CSDN上参考了几篇文章,最终一步步解决了所有问题,在此按照安装和使用顺序做一个遇见常见问题的解决方案,希望对后面使用者有帮助。1、64位系统安装64位的ise却无法打开,只能打开32位版本的2、更换license3、联合modelsim进行仿真4、编译仿真库的时候出现error5...

基于linux系统的CAN总线移动机器人-根文件系统_基于linux机器人_小丑嘲笑的博客-程序员秘密

Linux 中的根文件系统更像是一个文件夹或者叫做目录,在这个目录里面会有很多的子目录。根目录下和子目录中会有很多的文件,这些文件是 Linux 运行所必须的,比如库、常用的软件和命令、设备文件、配置文件等等。以后我们说到文件系统,如果不特别指明,统一表示根文件系统。根文件系统首先是内核启动时所 mount(挂载)的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。根文件系统是 Linux 内核启动以后挂载(

推荐文章

热门文章

相关标签