shell中sed用法,shell sed命令详解

shell中sed用法,shell sed命令详解,shell脚本--sed的用法详解

本文主要介绍了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文件中所有注释的空行,然后删除空行,用分号分隔替换和删除操作。

Sed's/[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的更多详细信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: