本文主要介绍了shell script - sed的用法详解,通过示例代码进行了详细介绍,对大家的学习或工作有一定的参考价值。有需要的朋友就跟着下面的边肖学习吧。
: 目录
1.如何使用sed,调用sed命令有两种语法:sed的常用选项:SED: 2中的Edit命令。SED命令示例:示例1:在文件中添加或插入一行:示例2:更改文件中的指定行:示例3:删除文件中的行:示例4:替换文件中的内容:示例5:打印文件中的行:示例6:打印文件的行号:示例7
Sed是Linux下功能强大的非交互式流文本编辑器,可以添加、删除、更改和检查文本文件。支持按行、字段、规则匹配文本内容,灵活方便,特别适合编辑大文件。本文主要介绍sed的一些基本用法,并通过shell脚本演示sed的使用实例。
1.sed的使用方法,调用sed 命令的语法有两种:
I .在命令行上指定sed指令,以处理text: sed选项“指令”文件
第二,将sed指令保存到一个文件中,并将该文件作为参数调用:sed选项-f包含sed指令的文件file。
sed的常用选项:-r:使用扩展正则表达式
-e:它告诉sed将下一个参数解释为sed指令。只有在命令行中给出多个sed指令时,才需要-e选项。
-f:后跟保存sed指令的文件。
-i:直接修改内容。如果不添加-i,默认情况下它只是一个预览,文件不会被实际修改。
-n:取消默认输出,sed默认输出所有文本内容,使用-n参数后只显示处理过的行。
sed中的编辑命令:答:在匹配行后添加内容。
C: Change改变匹配行的内容。
I: insert在匹配行之前插入内容。
d:删除删除匹配的内容。
S: replace替换匹配的内容。
p:打印出匹配的内容,通常带有-n选项和
=:用于打印匹配行的行号。
n:读取下一行,遇到n时自动跳转到下一行。
R,W:读写编辑命令,R用于将内容读入文件,W用于将匹配的内容写入文件。
2.sed命令实例:
示例1:向文件中添加或插入行Sed 3ahello 1.txt #在第三行添加hello,3表示行号。
Sed/123/aherro 1.txt #在内容123后添加hello。如果文件中有包括123在内的多行,它将被添加到每一行之后。
Sed $ahello 1.txt #在最后一行添加hello
Sed 3ihello 1.txt #在第三行之前插入hello
Sed /123/ihello 1.txt #在包含123的行之前插入hello。如果有多行包含123,hello将被插入到每一行包含123的行之前。
Sed $ihello 1.txt #在最后一行之前插入hello
示例2:更改文件中指定的行Sed 1chello 1.txt #将文件1.txt的第一行替换为hello
Sed /123/chello 1.txt #将包含123的行替换为hello
Sed $chello 1.txt #将最后一行替换为hello
示例3:删除文件中的行Sed 4d 1.txt #删除第四行
Sed 1~2d 1.txt #从第一行开始删除,每两行删除一行,即奇数行删除。
Sed 1,2d 1.txt #删除1~2行
sed 1,2!D 1.txt #删除除1~2以外的所有行
Sed $d 1.txt #删除最后一行
Sed /123/d 1.txt #删除与123匹配的行
Sed /123/,$d 1.txt #从匹配123的行删除到最后一行
Sed /123/,1d 1.txt #删除匹配123的行及其后的行。
Sed/$/d 1.txt #删除空行
sed /123|abc/!D 1.txt #删除不匹配123或abc的行,/123 -abc/表示匹配123或ABC!密集否定
Sed 1,3{/123/d} 1.txt #删除1~3行中匹配内容123的行,1,3表示匹配1~3行,{/123/d}表示删除匹配123的行。
示例4:替换文件中的内容Sed的/123/hello/ 1.txt #用hello替换文件中的123,默认情况下只替换每行的前123。
Sed s/123/hello/g 1.txt #将文本中的所有123替换为hello。
Sed s/123/hello/2 1.txt #将每行中第二个匹配的123替换为hello。
Sed-n的/123/hello/gpw2.txt 1.txt #用hello替换每行中所有匹配的123,并将替换的内容写入2.txt。
Sed /#/s/,*//g 1.txt #匹配带#号的行,匹配行中逗号后的内容全部为空(,*)表示逗号后的所有内容。
Sed的/.$//g 1.txt #将每行最后两个字符替换为空白,每个点代表一个字符,$表示匹配结束(.$)表示匹配最后两个字符。
Sed的/#。*/1.txt #将1.txt文件中以#开头的行替换为空行,即注释行(#)表示匹配以#和(。*)表示一切。
塞德s/^#.*//;/$/d 1.txt #首先替换1.txt文件中所有注释的空行,然后删除空行,用分号分隔替换和删除操作。
Seds/[0-9]/()/1.txt #在每行开头的数字上加一个括号([0-9]),表示该行开头是一个数字,符号代表匹配的内容。
#或者
Sed的/ ([0-9] )/(1)/1.txt #用键转义替换左侧的特殊字符,但右侧不需要转义。 1表示匹配的内容。
Sed的/$/haha/ 1.txt #在1.txt文件的每一行后添加 haha 字段。
示例5:打印文件中的行Sed -n 3p 1.txt #打印文件中的第三行
Sed -n 2~2p 1.txt #从第二行开始,每隔两行打印一行。波浪号后的2表示步长。
Sed -n $p 1.txt #打印文件的最后一行
Sed -n 1,3p 1.txt #打印1到3行
Sed -n 3,$p 1.txt #打印第三行到最后一行的内容。
Sed -n /you/p 1.txt #逐行读取文件并打印与您匹配的行
Sed -n /bob/,3p 1.txt #逐行读取文件,将bob匹配的那一行到第三行的内容打印出来。
Sed -n /you/,3p 1.txt #打印与您匹配的行到第三行,还打印后面所有与您匹配的行。
Sed -n 1,/too/p 1.txt #打印第一行到匹配的too行。
Sed -n 3,/you/p 1.txt #只打印第三行到与你匹配的那一行。
Sed -n /too/,$p 1.txt #打印从匹配too的那一行到最后一行的内容。
Sed -n /too/,1p 1.txt #打印匹配too的行及其后向行。如果有多行也匹配,则匹配的每一行都将向后多打印一行。
Sed -n /bob/,/too/p 1.txt #打印从匹配内容bob到匹配内容too之间的行。
示例6:打印文件的行号Sed -n $= 1.txt #打印1.txt文件最后一行的行号(即文件中有多少行,类似于wc -l函数)
Sed -n /error/= 1.txt #打印与错误匹配的行的行号
sed-n /error/{=;P} 1.txt #打印匹配错误行的行号和内容(可用于查看日志中有错误的行及其内容)
示例7:从文件中读取内容Sed r 2.txt 1.txt #将文件2.txt的内容读入1.txt,1.txt中的每一行之后都会读取2.txt的内容。
Sed 3r 2.txt 1.txt #在1.txt的第三行之后插入文件2.txt的内容(可用于将内容插入文件)
Sed /245/r 2.txt 1.txt #在行匹配245后插入文件2.txt的内容,如果1.txt中有多行匹配456,则在每行后插入。
Sed $r 2.txt 1.txt #在1.txt的最后一行插入2.txt的内容。
示例8:向文件中写入内容Sed -n w 2.txt 1.txt #将1.txt文件的内容写入2.txt文件。如果2.txt文件不存在,将创建该文件。如果2.txt文件确实存在,它将覆盖以前的内容。
Sed -n 2w 2.txt 1.txt #将file 1.txt中的第二行写入file 2.txt。
sed-n-e 1 w2.txt -e $ w2 . txt 1.txt #将1 . txt的第一行和最后一行写到2 . txt。
sed-n-e 1 w2.txt -e $ w3.txt 1.txt #将1 . txt的第一行和最后一行分别写入2 . txt和3 . txt。
Sed -n /abc|123/w 2.txt 1.txt #将1.txt中与abc或123匹配的行的内容写入2.txt。
Sed -n /666/,$w 2.txt 1.txt #将1.txt中匹配666的行到最后一行的内容写入2.txt。
Sed -n /xyz/,2w 2.txt 1.txt #将1.txt中与xyz匹配的那一行和后面两行的内容写入2.txt。
示例9:sed 在shell脚本中的使用示例1:替换文件的内容
#!/bin/bash
if[$ #-ne 3];然后#号判断参数
Echo 用法:$0旧部分新部分文件名 #输出脚本用法
出口
船方不负担装货费用
Sed -i的#$1#$2# $3 #替换了旧内容。当$1和$2中包含/时,替换指令中的分隔符需要用其他符号替换。
示例2:删除文件中的空行
#!/bin/bash
如果[!-1荷兰盾];然后#确定参数是否是文件并且存在。
回显“$0不是文件”
出口
船方不负担装货费用
Sed-I/$/D $1 #删除空行
示例3:格式化文本内容
#!/bin/bash
A= s/*/#定义一个变量A保存sed指令, s/*/:它的意思是匹配以0个或多个空格开头,后面跟一个符号的行,替换匹配的内容。
s/ t */# s/ t */:表示匹配以0个或多个制表符开始的行,并替换匹配的内容。
S///#的S//:指示以“”开头的行被匹配,匹配的内容被替换。
S/* s/^ *// #s/^ *//*/:表示匹配以0个或多个空格开头的行,替换匹配的内容。
#echo $a
Sed $a $1 #格式化用户给定的文本文件。
脚本:批量更改当前目录下的文件扩展名:
示例1:
#!/bin/bash
if[$ #-ne 2];然后#判断用户的输入,如果参数个数不是2则打印脚本用法。
回显用法:$0旧文件新文件
出口
船方不负担装货费用
对于i in *$1* #遍历包含用户给定参数的文件
做
if[-f $ I];然后
Iname=`basename $i` #获取文件名
newname=` echo $ iname | sed-e s/$ 1/$ 2/g ` `#替换文件名,并将其赋给一个新变量。
Mv $iname $newname #重命名文件
船方不负担装货费用
完成的
666号出口
示例2:
#!/bin/bash
Read -p 输入旧文件: old #提示用户输入要替换的文件的后缀。
read -p 输入新文件: new
[-z $ old]| |[-z $ new]echo error exit #确定用户是否有输入,如果没有,如何打印错误并退出。
对于` ls *中的文件。$旧`的
做
if[-f $ file];然后
New=$ {file% $ old} #文件尾
Mv $file ${newfile}$new #文件重命名
船方不负担装货费用
完成的
示例3:
#!/bin/bash
if[$ #-ne 2];然后#判断位置变量的个数是否为2。
回显用法:$0旧文件新文件
出口
船方不负担装货费用
For file in `ls` #遍历当前目录中的文件
做
if[[$ file=~ $ 1 $]];然后#对用户给定的位置变量$1进行常规匹配,$1$表示匹配以变量$1结尾的文件。
Echo $file #将匹配的项目输出到屏幕上进行确认
New=${file%$1} #结束文件,删除文件的后缀,保留文件名,并将文件名赋给变量New。
Mv $file ${new}$2 #将匹配文件重命名为:文件名的新扩展名。
船方不负担装货费用
完成的
示例4:使用sed匹配文件中的IP地址
sed -nr /([0-9]{1,3}。){3}([0-9]{1,3})/p 1.txt
这就是本文关于shell脚本使用的全部内容。有关shell - sed的更多详细信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!