时间:2021-05-22
sed在处理文本时是逐行读取文件内容,读到匹配的行就根据指令做操作,不匹配就跳过。
sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑。本文主要介绍sed的一些基本用法,并通过shell脚本演示sed的使用实例。
一.在命令行指定sed指令对文本进行处理:sed +选项 ‘指令' 文件
二.先将sed指令保存到文件中,将该文件作为参数进行调用:sed +选项 -f 包含sed指令的文件 文件
-r:使用扩展正则表达式
-e:它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项
-f:后跟保存了sed指令的文件
-i:直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
a:追加 向匹配行后面插入内容
c:更改 更改匹配行的内容
i:插入 向匹配行前插入内容
d:删除 删除匹配的内容
s:替换 替换掉匹配的内容
p:打印 打印出匹配的内容,通常与-n选项和用
=:用来打印被匹配的行的行号
n:读取下一行,遇到n时会自动跳入下一行
r,w:读和写编辑命令,r用于将内容读入文件,w用于将匹配内容写入到文件
实例1:替换文件中的内容
#!/bin/bashif [ $# -ne 3 ];then #判断参数个数 echo "Usage: $0 old-part new-part filename" #输出脚本用法 exitfised -i "s#$1#$2#" $3 #将 旧内容进行替换,当$1和$2中包含"/"时,替换指令中的定界符需要更换为其他符号实例2:删除文件中的空白行
#!/bin/bashif [ ! -f $1 ];then #判断参数是否为文件且存在 echo "$0 is not a file" exitfised -i "/^$/d" $1 #将空白行删除实例3:格式化文本内容
#!/bin/basha='s/^ *>// #定义一个变量a保存sed指令,'s/^ *>//':表示匹配以0个或多空格开头紧跟一个'>'号的行,将匹配内容替换s/\t*// #'s/\t*//':表示匹配以0个或多个制表符开头的行,将匹配内容替换s/^>// #'s/^>//' :表示匹配以'>'开头的行,将匹配内容替换s/^ *//' #'s/^ *//':表示匹配以0个或多个空格开头的行,将匹配内容替换#echo $ased "$a" $1 #对用户给定的文本文件进行格式化处理实用脚本:批量更改当前目录中的文件后缀名:
示例1:
#!/bin/bashif [ $# -ne 2 ];then #判断用户的输入,如果参数个数不为2则打印脚本用法 echo "Usage:$0 + old-file new-file" exitfifor i in *$1* #对包含用户给定参数的文件进行遍历do if [ -f $i ];then iname=`basename $i` #获取文件名 newname=`echo $iname | sed -e "s/$1/$2/g"` #对文件名进行替换并赋值给新的变量 mv $iname $newname #对文件进行重命名 fidoneexit 666示例2:
#!/bin/bashread -p "input the old file:" old #提示用户输入要替换的文件后缀read -p "input the new file:" new[ -z $old ] || [ -z $new ] && echo "error" && exit #判断用户是否有输入,如果没有输入怎打印error并退出for file in `ls *.$old`do if [ -f $file ];then newfile=${file%$old} #对文件进行去尾 mv $file ${newfile}$new #文件重命名 fidone示例3:
#!/bin/bashif [ $# -ne 2 ];then #判断位置变量的个数是是否为2 echo "Usage:$0 old-file new-file" exitfifor file in `ls` #在当前目录中遍历文件do if [[ $file =~ $1$ ]];then #对用户给出的位置变量$1进行正则匹配,$1$表示匹配以变量$1的值为结尾的文件 echo $file #将匹配项输出到屏幕进行确认 new=${file%$1} #对文件进行去尾处理,去掉文件后缀保留文件名,并将文件名赋给变量new mv $file ${new}$2 #将匹配文件重命名为:文件名+新的后缀名 fidone示例4:使用sed匹配文件中的IP地址
sed -nr '/([0-9]{1,3}\.){3}([0-9]{1,3})/p' 1.txt到此这篇关于shell脚本--sed的用法详解的文章就介绍到这了,更多相关shell --sed内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Linux在Shell脚本中使用函数实例详解Shell的函数Shell程序也支持函数。函数能完成一特定的功能,可以重复调用这个函数。函数格式如下:函数名(){函
这篇文章主要介绍了编写shell脚本,使用iconv批量改变文件编码的脚本代码,需要的朋友可以参考下。用法示例:cd~/workspace/XXXProject
Shell脚本Shell脚本(shellscript),是一种为shell编写的脚本程序。业界所说的shell通常都是指shell脚本,但读者朋友要知道,she
sed命令行格式为:sed[-nefri]‘command’输入文本常用选项:-n∶使用安静(silent)模式。在一般sed的用法中,
sed命令行格式为:sed[-nefri]‘command'输入文本常用选项:-n∶使用安静(silent)模式。在一般sed的用法中,所有来自STDIN的资料