QQ个性网:专注于分享免费的QQ个性内容

关于我们| 网站公告| 广告服务| 联系我们| 网站地图

搜索
编程 JavaScript Java C++ Python SQL C Io ML COBOL Racket APL OCaml ABC Sed Bash Visual Basic Modula-2 Logo Delphi IDL Groovy Julia REXX Chapel X10 Forth Eiffel C# Go Rust PHP Swift Kotlin R Dart Perl Ruby TypeScript MATLAB Shell Lua Scala Objective-C F# Haskell Elixir Lisp Prolog Ada Fortran Erlang Scheme Smalltalk ABAP D ActionScript Tcl AWK IDL J PostScript IDL PL/SQL PowerShell

Linux三剑客之sed

日期:2025/04/08 13:12来源:未知 人气:57

导读:Linux三剑客之sed命令sed语法与选项介绍sed 是 Stream Editor(字符流编辑器)的缩写,简称流编辑器。它是Linux 三剑客之一。sed 是操作、过滤和转换文本内容的强大工具。sed 的常用功能包含对文件实现快速增刪改查,其中查询的功能中最常用的两大功能是过滤(过滤指定字符串)和取行(取出指定的行)。sed语法格式sed 选项 sed内置命令字符 文件se......

Linux三剑客之sed命令

sed语法与选项介绍

sed 是 Stream Editor(字符流编辑器)的缩写,简称流编辑器。它是Linux 三剑客之一。sed 是操作、过滤和转换文本内容的强大工具。sed 的常用功能包含对文件实现快速增刪改查,其中查询的功能中最常用的两大功能是过滤(过滤指定字符串)和取行(取出指定的行)。

sed语法格式

sed 选项 sed内置命令字符 文件

sed命令的执行流程

了解sed命令的执行流程,方便我们后续分析故障,解决报错举个例子:# 以下是1.txt文件内容1,zls,6662,wls,7773,cls,8884,lls,999-n 取消默认输出执行 sed -n '3p' 1.txt命令后,sed都做了啥?1.sed先是按行读取文件内容2.每读取一行内容,都会进行一次判断,是不是你想要的行3.如果不是,则判断是不是加了-n选项4.如果加了-n,取消默认输出5.如果没加-n,就会将所有内容输出到命令行(默认输出)6.如果是,你想要的那一行(第三行)则判断执行的后续动作(p d s a i c)7.动作处理完成后,输出指定的内容8.即便是读取完了,内容也输出了,sed也会继续往后读,直到文件的最后一行# 可见sed会把文件整个读一遍,所以大文件的话不要用sed取东西

sed-查

p: print打印/显示cat 1.txt1,zls,6662,wls,7773,cls,8884,lls,999# 取行[root@web01 ~]# sed '3p' 1.txt1,zls,6662,wls,7773,cls,8883,cls,8884,lls,999[root@web01 ~]# sed -n '3p' 1.txt //取第几行就几p3,cls,888# 范围取行[root@web01 ~]# sed -n '1,3p' 1.txt1,zls,6662,wls,7773,cls,888只取第1行和第三行??sed -n '1p','3p' 1.txt 行不行?[root@web01 ~]# sed -n '1p','3p' 1.txtsed: -e expression #1, char 3: extra characters after command# 模糊查询[root@web01 ~]# sed -n '/zl/p' 1.txt1,zls,666[root@web01 ~]# sed -nr '/zl|cl/p' 1.txt1,zls,6663,cls,888# 模糊范围查询[root@web01 ~]# sed -nr '/zl/,/cls/p' 1.txt1,zls,6662,wls,7773,cls,888[root@web01 ~]# sed -nr '/03:43/,/05:23/p' blog.driverzeng.com_access.log打印03:43到05:23之间的访问日志# 模糊范围查询,相当于grep -A[root@web01 ~]# sed -nr '/wls/,+2p' 1.txt2,wls,7773,cls,8884,lls,999# 取反[root@web01 ~]# sed -nr '/wls/!p' 1.txt1,zls,6663,cls,8884,lls,999

sed-删

d delete这个就不需要加-n了# 删除但不改变文件内容因为是放在缓存里了(内存)[root@web01 ~]# sed '1d' 1.txt2,wls,7773,cls,8884,lls,999# 删除并修改文件内容-i[root@web01 ~]# sed -i '2d' 1.txt[root@web01 ~]# cat 1.txt1,zls,6663,cls,8884,lls,999# 删除前,做备份[root@web01 ~]# sed -ibak '2d' 1.txt[root@web01 ~]# cat 1.txt1,zls,6663,cls,8884,lls,999[root@web01 ~]# cat 1.txtbak //会生成一个备份1,zls,6662,wls,7773,cls,8884,lls,999[root@web01 ~]# sed -i.zls '2d' 1.txt //备份文件名叫啥都行[root@web01 ~]# cat 1.txt1,zls,6664,lls,999[root@web01 ~]# cat 1.txt.zls1,zls,6663,cls,8884,lls,999# 删除最后一行[root@web01 ~]# sed '$d' 1.txt1,zls,6662,wls,7773,cls,888# 其他类似p的操作[root@web01 ~]# sed '1,3d' 1.txt //删除1-3行4,lls,999[root@web01 ~]# sed '/zl/d' 1.txt2,wls,7773,cls,8884,lls,999[root@web01 ~]# sed '/zls/,/cls/d' 1.txt4,lls,999[root@web01 ~]# sed '/cls/,$d' 1.txt1,zls,6662,wls,777

sed-增

c a i# c:replace替换[root@web01 ~]# sed '2c5,tls,555' 1.txt //替换第2行为5,tls,5551,zls,6665,tls,5553,cls,8884,lls,999[root@web01 ~]# sed '/zls/c5,tls,555' 1.txt //替换zls所在行5,tls,5552,wls,7773,cls,8884,lls,999[root@web01 ~]# sed '/zls/,/cls/c5,tls,555' 1.txt //替换zls到cls所在行5,tls,5554,lls,999# a:append追加会加在指定行后面比如,在第4行后面追加一行:5,tls,555[root@web01 ~]# sed '4a5,tls,555' 1.txt1,zls,6662,wls,7773,cls,8884,lls,9995,tls,555[root@web01 ~]# sed '/zls/,/cls/a5,tls,555' 1.txt //zls到cls后面每一行都追加1,zls,6665,tls,5552,wls,7775,tls,5553,cls,8885,tls,5554,lls,999# i:insert插入会插在指定行前面[root@web01 ~]# sed '1i5,tls,555' 1.txt5,tls,5551,zls,6662,wls,7773,cls,8884,lls,999[root@web01 ~]# sed '/zls/,/cls/i5,tls,555' 1.txt5,tls,5551,zls,6665,tls,5552,wls,7775,tls,5553,cls,8884,lls,999

sed-改 (替换)

s: search 查找g:global 全局s###gs@@@gs啥都行g

[root@web01 ~]# sed 's#zls#tls#g' 1.txt // zls替换成tls1,tls,6662,wls,7773,cls,8884,lls,999[root@web01 ~]# vim 1.txt1,zls,666,zls,1232,wls,777,wls,4563,cls,888,cls,7894,lls,999,lls,JQK[root@web01 ~]# sed 's#zls#tls#' 1.txt // 可以不加g,只替换第一个1,tls,666,zls,1232,wls,777,wls,4563,cls,888,cls,7894,lls,999,lls,JQK[root@web01 ~]# sed 's#zls#tls#' 1.txt1,tls,666,zls,1231,tls,666,zls,1231,tls,666,zls,1232,wls,777,wls,4563,cls,888,cls,7894,lls,999,lls,JQK[root@web01 ~]# sed '2s#zls#tls#' 1.txt //只替换第二行的zls1,zls,666,zls,1231,tls,666,zls,1231,zls,666,zls,1232,wls,777,wls,4563,cls,888,cls,7894,lls,999,lls,JQK[root@web01 ~]# sed '2,5s#zls#tls#' 1.txt // 指定2-5行vim里加个%是所有行。这里不用加

拓展:sed模式空间

保存到内存时不会带换行符。

使用sed命令将文件中的回车替换成空格

[root@m01 12:01:33 ~]# cat 1.txt1,zls,666,zls,1232,wls,777,wls,4563,cls,888,cls,7894,lls,999,lls,JQK[root@m01 12:05:05 ~]# sed 'N;s#\n# #g' 1.txt1,zls,666,zls,123 2,wls,777,wls,4563,cls,888,cls,789 4,lls,999,lls,JQK[root@m01 12:05:29 ~]# sed 'N;N;s#\n# #g' 1.txt1,zls,666,zls,123 2,wls,777,wls,456 3,cls,888,cls,7894,lls,999,lls,JQK[root@m01 12:06:47 ~]# sed 'N;N;N;s#\n# #g' 1.txt1,zls,666,zls,123 2,wls,777,wls,456 3,cls,888,cls,789 4,lls,999,lls,JQK[root@m01 12:06:52 ~]# sed ':label;N;s#\n# #g;t label' 1.txt1,zls,666,zls,123 2,wls,777,wls,456 3,cls,888,cls,789 4,lls,999,lls,JQK

Sed排行

关于我们|网站公告|广告服务|联系我们| 网站地图

Copyright © 2002-2023 某某QQ个性网 版权所有 | 备案号:粤ICP备xxxxxxxx号

声明: 本站非腾讯QQ官方网站 所有软件和文章来自互联网 如有异议 请与本站联系 本站为非赢利性网站 不接受任何赞助和广告