sed匹配多行并替换其中的内容

sed -i ‘/aaa/{:a;n;s/123/xyz/g;/eee/!ba}‘ yourfile

如题:
aaa
123
123
123
123
123
eee
怎么匹配aaa~eee(开始结束字符串确定),然后替换123这样的

先匹配aaa,匹配到后执行大括号里的语句。

n 读取下一行

s/123/xyz/g  将123替换为xyz,全局替换,同一行中出现几次替换几次

:a 设定跳转标签a

/eee/!ba  若当前行匹配不上eee,则跳转到标签a处继续执行,构成一个循环。若匹配到eee,则退出循环,sed重新对读入的每行匹配aaa。

由于sed没有加-n静默选项,所以默认对每行数据处理后都打印。

其中:a和!ba中的a是可以随意改变的,其中的b是不可改变的.

时间: 2024-10-12 22:52:48

sed匹配多行并替换其中的内容的相关文章

Linux之sed:删除某行以及替换

sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为:         sed [-nefri] 'command' 输入文本 常用选项:        -n∶使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上.但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来.        -e∶直接在

sed指定某行插入、追加、全局替换

分类:Linux (1088)  (0) 有时候会有这样的需求,在指定的行后面或者是前面追加一行,这个时候可以使用sed来完成,具体用法如下 a\ 在指定的行后面追加一行 b\ 在指定的行前面追加一行 使用指定的行号追加内容,在使用行号的过程中,需要注意的问题有以下 N;后面只能使用偶数,且不可以为0 a表示在指定的行后面追加一行 i表示在当前行插入一行,如果指定行为4,其实最终的结果插入行的位置是第三行. sed -i 'N;2a\newline' 1.txt sed -i 'N;2i\new

sed匹配与替换

今天发现之前创建nagios用户是在/bin/bash下的,存在一定的安装隐患,由于涉及的服务器数量较多,所以采用saltstack命令行批量更改. 利用sed匹配字符串(nagios)所在行,并且替换这行的一些关键字(/bin/bash) salt '*' cmd.run "sed -i '/nagios/s#/bin/bash#/sbin/nologin#' /etc/passwd" 首先匹配nagios用户这一行,s替换,#为分隔符,将/bin/bash替换为/sbin/nolo

sed 匹配多个字符串的行打印

匹配多个关键词,打印出匹配的行,效果类似于 grep grep hello\|world file > output 或者用扩展正则 grep -E '(hello|world)' file > output 如果grep用的是 -e 小写e参数,需要加上反斜杠转移,即: grep -e '\(hello\|world\)' file > output GNU sed 写法 sed -n '/hello\|world/p' file > output 这种写法 UNIX的sed不支

Linux Sed命令详解+如何替换换行符"\n"(很多面试问道)

Sed Sed是一个强大的文本处理工具 可以采用正则匹配,对文本进行插入删除修改等操作 Sed处理的时候,一次处理一行,每一次把当前处理的存放在临时缓冲区,处理完后输出缓冲区内容到屏幕,然后把下一行读入缓冲区,如此重复,直到结尾. 1.命令格式和参数 sed [-nefr] [动作] 文件 参数: -n 安静模式,在sed处理的时候,所有来自STDIN的数据都会被输出到终端,加上-n会只输出处理的哪行 -e 直接在命令列上进行sed动作编辑 -f 直接将sed的动作写在文件内 -r sed动作支

Linux Sed命令具体解释+怎样替换换行符"\n"(非常多面试问道)

Sed Sed是一个强大的文本处理工具 能够採用正则匹配.对文本进行插入删除改动等操作 Sed处理的时候,一次处理一行,每一次把当前处理的存放在暂时缓冲区.处理完后输出缓冲区内容到屏幕,然后把下一行读入缓冲区,如此反复,直到结尾. 1.命令格式和參数 sed [-nefr] [动作] 文件 參数: -n 安静模式.在sed处理的时候.全部来自STDIN的数据都会被输出到终端.加上-n会仅仅输出处理的哪行 -e 直接在命令列上进行sed动作编辑 -f 直接将sed的动作写在文件内 -r sed动作

sed 匹配\n换行符

假设 str="a,b,c,d" echo ${str} | sed "s/,/\n/g" 输出: a b c d echo ${str} | sed "s/,/\n/g" | sed "s/\n/,/g" 输出: a b c d 没有匹配到\n换行符 这是因为sed 模式是以\n换行符作为行的结束标记的.它没有办法匹配到\n再替换 解决方法: echo ${str} | sed "s/,/\n/g" |

sed在指定行上删除和添加字符

欢迎转载!转载时请注明出处:http://blog.csdn.net/nfer_zhuang/article/details/44020599 引言 我在一个项目中需要发布版本,两个客户的需求基本相同,只有是在一个fm34(消回音)模块上一个有该功能,另外一个没有.那么就存在在发版本的时候根据需要打开和关闭关于fm34相关的代码. 其中的一个就是是否需要inmod一个ko文件,我的处理是: 在脚本中有inmod该ko的一行代码,但是默认是被注释掉的 在给需要该功能的客户发布版本时,通过sed将改

Linux命令行批量替换多文件中的字符串【转】

Linux命令行批量替换多文件中的字符串[转自百度文库] 一种是Mahuinan法,一种是Sumly法,一种是30T法分别如下: 一.Mahuinan法: 用sed命令可以批量替换多个文件中的字符串.sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录` 例如:我要把mahuinan替换为huinanma, 执行命令:sed -i "s/mahuinan/huinanma/g" 'grep mahuinan -rl /www' 这是目