Linux三剑客老二sed

简介: Linux三剑客老二sed

点 击上方 “ 编程三分钟 ”,马上关注,每天早上8:50准时推送。

 我才不要手动改配置。——编程三分钟


概述


sed命令是用来批量修改文本内容的,比如批量替换配置中的某个ip。


sed [参数] [文本或文件]


由于不加-i参数只会输出到控制台不会写入到文件中,所以以下例子默认加-i


插入


  1. 在某行前面插入一行
$ sed -i "1a insert after" file.txt
$ cat file.txt
1
insert after
2
3

其中1a表示在第1行后(after)插入

  1. 在某行后面插入一行
1. $ sed -i "1i insert before" file.txt
2. $ cat file.txt
3. insert before
4. 1
5. 2
6. 3


其中1i表示在第1行前插入


删除


1. $ sed -i '2,3d' file.txt
2. $ cat file.txt
3. 1


删除行可以删除一行 (3d删除第三行),也可以写一个范围(2,3d删除2-3行,闭区间),$符号代表末尾/^2/d代表删除所有内容以2开头的行)


替换行


1. $ sed -i '2c replace' file.txt
2. $ cat file.txt
3. 1
4. replace
5. 3


2c replace表示替换第2行的内容为replace/^2/c replace代表替换所有以2开头的行为replace


仅替换匹配的字符串


为了便于演示修改文件内容为

$ cat -n config.txt
     1    name=coding3min
     2    age=0
     3    email=coding3min@foxmail.com
     4    name=coding3min
     5    age=0
     6    email=coding3min@foxmail.com

使用命令批量替换3-4行之间coding3min字符串为tom


$ sed -i '3,4s/coding3min/tom/g' config.txt
$ config.txt
name=coding3min
age=0
email=tom@foxmail.com
name=tom
age=0
email=coding3min@foxmail.com

s/coding3min/top/g代表全文匹配不限制行,去掉g代表只替换匹配到的第一个如s/coding3min/top


查找与输出


输出3-4行的内容

sed -n 3,4p config.txt
email=coding3min@foxmail.com
name=coding3min

查找所有以name开头的行


1. sed -n '/^name/p' config.txt
2. name=coding3min
3. name=coding3min


可以看到只要用-n参数+匹配p模式就可以sj查找并输出


自动创建备份文件


当然了,直接sed -i很容易造成替换错误,哭都没办法哭!所以需要事先用-n+p也就是上一节说的方法先校验下结果。但是每个都校验显然是不实际的。所以可以用 sed -i备份文件后缀的方式例如sed -i.bak或者sed -i.backup

$ sed -i.bak 's/coding3min/kitty/g' config.txt
$ ls
config.txt config.txt.bak
$ cat config.txt
name=kitty
age=0
email=kitty@foxmail.com
$ cat config.txt.bak
name=coding3min
age=0
email=coding3min@foxmail.com

与grep的结合使用


grep结合使用最爽的点就在可以提前校验和批量替换,提高容错率和效率,不会的赶紧Get了


sed -i 's/coding/kitty/g' `grep -rl coding *`
$cat config.txt
name=conding3min
age=0
email=conding3min@foxmail.com
$cat test/config.txt
name=conding3min
age=0
email=conding3min@foxmail.com

看明白了吗?上一节说的grep -rl递归找到匹配的文件,并把文件名输出,前后加上了 ` 反引号,就是键盘左上角数字1左边那个符号,代码提前执行。


其他技巧


使用sed把DOS格式的文件转换为Unix格式 sed 's/.$//' filename


匹配所有包含邮箱的行,(-n 选项让sed仅仅是输出经过处理之后的那些行)

sed -n '/[A-Za-z0-9]\+\@[a-zA-Z0-9_-]\+\(\.[a-zA-Z0-9_-]\+\)/p' config.txt
email=coding3min@foxmail.com
email=coding3min@foxmail.com

去掉所有的html标签


1. $ cat html.txt
2. 
3. <b>hi!</b><span>I'm</span>
4. 
5. $ sed 's/<[^>]*>//g' html.txt
6. 
7. hi!I'm father


相关文章
|
6月前
|
Linux Perl
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
|
5月前
|
机器学习/深度学习 Linux Perl
Linux文本处理三剑客之sed详解
这篇博客详细讲解了Linux中的文本处理工具sed的使用方法和常用命令。
331 9
Linux文本处理三剑客之sed详解
|
5月前
|
Linux Perl
Linux之sed命令
Linux之sed命令
|
5月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
950 2
|
5月前
|
Linux Perl
6-20|linux sed命令
6-20|linux sed命令
|
6月前
|
Linux Shell Perl
在Linux中,如何使用sed命令进行文本替换?
在Linux中,如何使用sed命令进行文本替换?
|
6月前
|
数据挖掘 Linux Perl
在Linux中,awk和sed命令的作用?
在Linux中,awk和sed命令的作用?
|
6月前
|
Linux BI 数据处理
在Linux中,如何使用awk和sed进行文本处理?
在Linux中,如何使用awk和sed进行文本处理?
|
8月前
|
存储 Linux BI
Linux 三剑客 grep、sed、awk
Linux三剑客`grep`、`sed`和`awk`是强大的文本处理工具。`grep`用正则表达式搜索匹配行;`sed`是流式编辑器,处理文本流而不直接修改原文件;`awk`则用于灵活的文本分析和报告生成。例如,`grep`可查找匹配模式,`sed`可以删除文件内容,而`awk`能提取特定字段。通过组合使用,它们能高效解决复杂文本任务。
94 1
|
7月前
|
存储 Unix Linux
探索Linux中的sed命令:强大的文本处理工具
`sed`是Linux/Unix的流编辑器,用于文本替换、删除、新增等操作,无需直接编辑文件。它逐行处理输入,存储在模式空间,执行脚本后输出。主要特点是非交互、支持正则表达式和简洁语法。示例:`sed &#39;s/apple/orange/g&#39; example.txt`替换文本,`/error/d`删除包含&quot;error&quot;的行,`a\---`在每行后加&quot;---&quot;。使用时注意备份、测试命令和理解正则表达式。