您现在的位置是:网站首页> 编程资料编程资料
shell脚本--sed的用法详解_linux shell_
2023-05-26
372人已围观
简介 shell脚本--sed的用法详解_linux shell_
sed在处理文本时是逐行读取文件内容,读到匹配的行就根据指令做操作,不匹配就跳过。
sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑。本文主要介绍sed的一些基本用法,并通过shell脚本演示sed的使用实例。
1.sed的使用方法,调用sed 命令的语法有两种:
一.在命令行指定sed指令对文本进行处理:sed +选项 ‘指令' 文件
二.先将sed指令保存到文件中,将该文件作为参数进行调用:sed +选项 -f 包含sed指令的文件 文件
sed的常用选项:
-r:使用扩展正则表达式
-e:它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项
-f:后跟保存了sed指令的文件
-i:直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
sed中的编辑命令:
a:追加 向匹配行后面插入内容
c:更改 更改匹配行的内容
i:插入 向匹配行前插入内容
d:删除 删除匹配的内容
s:替换 替换掉匹配的内容
p:打印 打印出匹配的内容,通常与-n选项和用
=:用来打印被匹配的行的行号
n:读取下一行,遇到n时会自动跳入下一行
r,w:读和写编辑命令,r用于将内容读入文件,w用于将匹配内容写入到文件
2.sed命令实例:
示例1:向文件中添加或插入行
sed '3ahello' 1.txt #向第三行后面添加hello,3表示行号

sed '/123/ahello' 1.txt #向内容123后面添加hello,如果文件中有多行包括123,则每一行后面都会添加

sed '$ahello' 1.txt #在最后一行添加hello

sed '3ihello' 1.txt #在第三行之前插入hello

sed '/123/ihello' 1.txt #在包含123的行之前插入hello,如果有多行包含123,则包含123的每一行之前都会插入hello

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 #从第一行开始删除,每隔2行就删掉一行,即删除奇数行

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 's/123/hello/' 1.txt #将文件中的123替换为hello,默认只替换每行第一个123

sed 's/123/hello/g' 1.txt #将文本中所有的123都替换为hello

sed 's/123/hello/2' 1.txt #将每行中第二个匹配的123替换为hello

sed -n 's/123/hello/gpw 2.txt' 1.txt #将每行中所有匹配的123替换为hello,并将替换后的内容写入2.txt

sed '/#/s/,.*//g' 1.txt #匹配有#号的行,替换匹配行中逗号后的所有内容为空 (,.*)表示逗号后的所又内容

sed 's/..$//g' 1.txt #替换每行中的最后两个字符为空,每个点代表一个字符,$表示匹配末尾 (..$)表示匹配最后两个字符

sed 's/^#.*//' 1.txt #将1.txt文件中以#开头的行替换为空行,即注释的行 ( ^#)表示匹配以#开头,(.*)代表所有内容

sed 's/^#.*//;/^$/d' 1.txt #先替换1.txt文件中所有注释的空行为空行,然后删除空行,替换和删除操作中间用分号隔开

sed 's/^[0-9]/(&)/' 1.txt #将每一行中行首的数字加上一个小括号 (^[0-9])表示行首是数字,&符号代表匹配的内容 #或者 sed 's/\(^[0-9]\)/(\1)/' 1.txt #替换左侧特殊字符需钥转义,右侧不需要转义,\1代表匹配的内容

sed 's/$/&'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行
相关内容
- Linux 使用shell脚本处理字符串的实现_linux shell_
- Shell退出状态码及其应用详解_linux shell_
- shell脚本中$符号的命令使用汇总_linux shell_
- shell语言date的用法实例_linux shell_
- shell脚本快速创建、格式化、挂载新添加的磁盘实现方法详解_linux shell_
- 详解shell脚本的编写规范_linux shell_
- linux自动化交互脚本expect详解_linux shell_
- shell 判断字符串是否存在数组中的实现示例_linux shell_
- shell之定时周期性执行脚本的方法示例_linux shell_
- shell模糊匹配与正则详解_linux shell_
