shell脚本–sed的用法[通俗易懂]

shell脚本–sed的用法[通俗易懂]sed在处理文本时是逐行读取文件内容,读到匹配的行就根据指令做操作,不匹配就跳过。sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑。本文主要介绍sed的一些基本用法,并通过shell脚本演示sed的使用实例。1.sed的使用方法,调用sed命令的语法有两种:一.在命令…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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表示行号

shell脚本--sed的用法[通俗易懂]

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

shell脚本--sed的用法[通俗易懂]

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

shell脚本--sed的用法[通俗易懂]

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

shell脚本--sed的用法[通俗易懂]

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

shell脚本--sed的用法[通俗易懂]

sed ‘$ihello’  1.txt     #在最后一行之前插入hello

shell脚本--sed的用法[通俗易懂]

示例2:更改文件中指定的行

sed  ‘1chello’  1.txt  #将文件1.txt的第一行替换为hello

shell脚本--sed的用法[通俗易懂]

sed  ‘/123/chello’  1.txt  #将包含123的行替换为hello

shell脚本--sed的用法[通俗易懂]

sed ‘$chello’  1.txt  #将最后一行替换为hello

shell脚本--sed的用法[通俗易懂]

示例3:删除文件中的行

sed  ‘4d’  1.txt    #删除第四行

shell脚本--sed的用法[通俗易懂]

sed ‘1~2d’ 1.txt   #从第一行开始删除,每隔2行就删掉一行,即删除奇数行

shell脚本--sed的用法[通俗易懂]

sed   ‘1,2d’  1.txt   #删除1~2行

shell脚本--sed的用法[通俗易懂]

sed  ‘1,2!d’  1.txt   #删除1~2之外的所有行

shell脚本--sed的用法[通俗易懂]

sed  ‘$d’   1.txt      #删除最后一行

shell脚本--sed的用法[通俗易懂]

sed  ‘/123/d’   1.txt   #删除匹配123的行

shell脚本--sed的用法[通俗易懂]

sed  ‘/123/,$d’  1.txt  #删除从匹配123的行到最后一行

shell脚本--sed的用法[通俗易懂]

sed  ‘/123/,+1d’  1.txt   #删除匹配123的行及其后面一行

shell脚本--sed的用法[通俗易懂]

sed  ‘/^$/d’    1.txt    #删除空行

shell脚本--sed的用法[通俗易懂]

sed   ‘/123\|abc/!d’  1.txt    #删除不匹配123或abc的行,/123\|abc/ 表示匹配123或abc ,!表示取反

shell脚本--sed的用法[通俗易懂]

sed  ‘1,3{/123/d}’   1.txt     #删除1~3行中,匹配内容123的行,1,3表示匹配1~3行,{/123/d}表示删除匹配123的行

shell脚本--sed的用法[通俗易懂]

示例4:替换文件中的内容

sed ‘s/^/#&/g’ 1.txt  #在1.txt文件中的每一行开头加一个#

shell脚本--sed的用法[通俗易懂]

sed  ‘s/123/hello/’   1.txt   #将文件中的123替换为hello,默认只替换每行第一个123

shell脚本--sed的用法[通俗易懂]

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

shell脚本--sed的用法[通俗易懂]

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

shell脚本--sed的用法[通俗易懂]

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

shell脚本--sed的用法[通俗易懂]

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

shell脚本--sed的用法[通俗易懂]

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

shell脚本--sed的用法[通俗易懂]

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

shell脚本--sed的用法[通俗易懂]

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

shell脚本--sed的用法[通俗易懂]

sed ‘s/^[0-9]/(&)/’   1.txt   #将每一行中行首的数字加上一个小括号   (^[0-9])表示行首是数字,&符号代表匹配的内容

或者  sed ‘s/\(^[0-9]\)/(\1)/’   1.txt  #替换左侧特殊字符需钥转义,右侧不需要转义,\1代表匹配的内容

shell脚本--sed的用法[通俗易懂]

sed  ‘s/$/&’haha’/’  1.txt   # 在1.txt文件的每一行后面加上”haha”字段

shell脚本--sed的用法[通俗易懂]

示例5:打印文件中的行

sed  -n ‘3p’  1.txt   #打印文件中的第三行内容

shell脚本--sed的用法[通俗易懂]

sed  -n ‘2~2p’  1.txt   #从第二行开始,每隔两行打印一行,波浪号后面的2表示步长

shell脚本--sed的用法[通俗易懂]

sed -n ‘$p’  1.txt  #打印文件的最后一行

shell脚本--sed的用法[通俗易懂]

sed -n ‘1,3p’  1.txt  #打印1到3行

shell脚本--sed的用法[通俗易懂]

sed  -n ‘3,$p’  1.txt  #打印从第3行到最后一行的内容

shell脚本--sed的用法[通俗易懂]

sed  -n ‘/you/p’  1.txt   #逐行读取文件,打印匹配you的行

shell脚本--sed的用法[通俗易懂]

sed  -n ‘/bob/,3p’  1.txt  #逐行读取文件,打印从匹配bob的行到第3行的内容

sed  -n  ‘/you/,3p’  1.txt  #打印匹配you 的行到第3行,也打印后面所有匹配you 的行

shell脚本--sed的用法[通俗易懂]

sed  -n ‘1,/too/p’  1.txt    #打印第一行到匹配too的行

sed  -n  ‘3,/you/p’  1.txt   #只打印第三行到匹配you的行

shell脚本--sed的用法[通俗易懂]

sed  -n ‘/too/,$p’  1.txt  #打印从匹配too的行到最后一行的内容

shell脚本--sed的用法[通俗易懂]

sed  -n ‘/too/,+1p’  1.txt    #打印匹配too的行及其向后一行,如果有多行匹配too,则匹配的每一行都会向后多打印一行

shell脚本--sed的用法[通俗易懂]

sed  -n ‘/bob/,/too/p’  1.txt   #打印从匹配内容bob到匹配内容too的行

shell脚本--sed的用法[通俗易懂]

示例6:打印文件的行号

sed  -n “$=”   1.txt   #打印1.txt文件最后一行的行号(即文件有多少行,和wc -l 功能类似)

shell脚本--sed的用法[通俗易懂]

sed  -n ‘/error/=’  1.txt     #打印匹配error的行的行号

sed  -n ‘/error/{=;p}’   1.txt    #打印匹配error的行的行号和内容(可用于查看日志中有error的行及其内容)

shell脚本--sed的用法[通俗易懂]

示例7:从文件中读取内容

sed  ‘r 2.txt’  1.txt  #将文件2.txt中的内容,读入1.txt中,会在1.txt中的每一行后都读入2.txt的内容

shell脚本--sed的用法[通俗易懂]

sed ‘3r 2.txt’  1.txt       #在1.txt的第3行之后插入文件2.txt的内容(可用于向文件中插入内容)

shell脚本--sed的用法[通俗易懂]

sed  ‘/245/r   2.txt’   1.txt    #在匹配245的行之后插入文件2.txt的内容,如果1.txt中有多行匹配456则在每一行之后都会插入

shell脚本--sed的用法[通俗易懂]

sed  ‘$r  2.txt’   1.txt     #在1.txt的最后一行插入2.txt的内容

shell脚本--sed的用法[通俗易懂]

示例8:向文件中写入内容

sed  -n  ‘w 2.txt’   1.txt   #将1.txt文件的内容写入2.txt文件,如果2.txt文件不存在则创建,如果2.txt存在则覆盖之前的内容

shell脚本--sed的用法[通俗易懂]

sed   -n ‘2w  2.txt’   1.txt   #将文件1.txt中的第2行内容写入到文件2.txt

shell脚本--sed的用法[通俗易懂]

sed  -n -e ‘1w  2.txt’  -e ‘$w 2.txt’   1.txt   #将1.txt的第1行和最后一行内容写入2.txt

sed  -n -e ‘1w  2.txt’  -e ‘$w  3.txt’  1.txt   #将1.txt的第1行和最后一行分别写入2.txt和3.txt

shell脚本--sed的用法[通俗易懂]

sed  -n  ‘/abc\|123/w  2.txt’    1.txt   #将1.txt中匹配abc或123的行的内容,写入到2.txt中

shell脚本--sed的用法[通俗易懂]

sed  -n ‘/666/,$w 2.txt’   1.txt   #将1.txt中从匹配666的行到最后一行的内容,写入到2.txt中

shell脚本--sed的用法[通俗易懂]

sed  -n  ‘/xyz/,+2w  2.txt’     1.txt     #将1.txt中从匹配xyz的行及其后2行的内容,写入到2.txt中

shell脚本--sed的用法[通俗易懂]

示例9:sed 在shell脚本中的使用

实例1:替换文件中的内容

#!/bin/bash
if [ $# -ne 3 ];then            #判断参数个数
  echo “Usage:  $0 old-part new-part filename”    #输出脚本用法
  exit
fi

sed -i “s#$1#$2#”  $3          #将 旧内容进行替换,当$1和$2中包含”/”时,替换指令中的定界符需要更换为其他符号

shell脚本--sed的用法[通俗易懂]

实例2:删除文件中的空白行

#!/bin/bash

if [ ! -f $1 ];then         #判断参数是否为文件且存在

   echo “$0 is not a file”

   exit

fi

sed -i “/^$/d”   $1 #将空白行删除

shell脚本--sed的用法[通俗易懂]

实例3:格式化文本内容

#!/bin/bash
a=’s/^  *>//      #定义一个变量a保存sed指令,’s/^ *>//’:表示匹配以0个或多空格开头紧跟一个’>’号的行,将匹配内容替换
s/\t*//                 #’s/\t*//’:表示匹配以0个或多个制表符开头的行,将匹配内容替换

s/^>//               #’s/^>//’ :表示匹配以’>’开头的行,将匹配内容替换

s/^ *//’               #’s/^ *//’:表示匹配以0个或多个空格开头的行,将匹配内容替换
#echo $a
sed “$a” $1        #对用户给定的文本文件进行格式化处理

shell脚本--sed的用法[通俗易懂]

实用脚本:批量更改当前目录中的文件后缀名:

示例1:

#!/bin/bash
if [ $# -ne 2 ];then               #判断用户的输入,如果参数个数不为2则打印脚本用法
  echo “Usage:$0 + old-file new-file”
  exit
fi
for i in *$1*                         #对包含用户给定参数的文件进行遍历
do
  if [ -f $i ];then
     iname=`basename $i`        #获取文件名
     newname=`echo $iname | sed -e “s/$1/$2/g”`         #对文件名进行替换并赋值给新的变量
     mv  $iname  $newname          #对文件进行重命名
   fi
done

exit 666

shell脚本--sed的用法[通俗易懂]

示例2:

#!/bin/bash
read -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                   #文件重命名
  fi

done

shell脚本--sed的用法[通俗易懂]

示例3:

#!/bin/bash

if [ $# -ne 2 ];then        #判断位置变量的个数是是否为2
   echo “Usage:$0  old-file  new-file”
   exit
fi
for file in `ls`                      #在当前目录中遍历文件
do
  if [[ $file =~ $1$ ]];then   #对用户给出的位置变量$1进行正则匹配,$1$表示匹配以变量$1的值为结尾的文件
     echo $file                      #将匹配项输出到屏幕进行确认
     new=${file%$1}             #对文件进行去尾处理,去掉文件后缀保留文件名,并将文件名赋给变量new                  
     mv $file ${new}$2          #将匹配文件重命名为:文件名+新的后缀名
  fi

done

shell脚本--sed的用法[通俗易懂]

示例4:使用sed匹配文件中的IP地址

sed -nr  ‘/([0-9]{1,3}\.){3}([0-9]{1,3})/p’  1.txt

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158310.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 电信系统服务器地址,电信高速dns服务器地址谁知道?

    电信系统服务器地址,电信高速dns服务器地址谁知道?丶言小午回答数:25336|被采纳数:62016-11-2200:56:35全国各地电信DNS北京DNS地址:202.96.199.133202.96.0.133202.106.0.20202.106.148.1202.97.16.195上海DNS地址:202.96.199.132202.96.199.133202.96.209.5202.96.209.6202.96.209.133天津…

  • mysql查看版本sql_linux查看mysql版本

    mysql查看版本sql_linux查看mysql版本查询mysql版本(select查mysql版本)2020-07-2411:32:47共10个回答1、通过mysql的-V参数查询版本信息mysql-V2、登录mysql时可以查询版本信息mysql-u用户名-p用户密码3、数据库状态查询版本信息status;4、通过mysql数据库函数查询版本信息selectversion();5、通过version环境变量查询版本信息执行selectvers…

  • 我的世界服务器怎么开启坐标显示,我的世界怎么设置坐标-坐标设置攻略「建议收藏」

    我的世界服务器怎么开启坐标显示,我的世界怎么设置坐标-坐标设置攻略「建议收藏」在我的世界中,每个玩家都有过迷路,找不到家的经历,或者是找到了资源,准备下次来采集的时候又找不到了,这时候坐标就很重要了,那么我的世界怎么设置坐标呢?跟小编一起来看看我的世界坐标设置攻略吧!我的世界坐标设置攻略在我的世界中想要设置坐标一般是指设置坐标传送点,以便快速传送。首先需要打开坐标的设置,可以在页面设置中把“显示坐标”打开,之后确认自己要传送的地点坐标,之后输入命令行/tp,如tp0…

  • android 打开相册_安卓系统照片在哪个存储文件中

    android 打开相册_安卓系统照片在哪个存储文件中在GoogleNexus7(Version4.4.2)平板出现之前,Intent.ACTION_GET_CONTENT打开相册会返回如下形式的Uri: content://media/external/images/media/3951,  使用ContentResolver查询MediaStore.Images.Media.DATA就可以找文件

  • 基本稳压电路

    基本稳压电路经过整流后的电源具有较大的电压纹波,单靠调节滤波电容不能明显改善输出电源纹波特性,因此需要采用稳压电路来减小输出电源的纹波。若直将稳压管接至负载输出,则稳压管的工作特性受负载影响较大,甚至会出现不能正常工作的情况。采用下图所示的稳压电路则能保证稳压管始终能够正常工作。其核心思想仍然是负反馈。运放正输入端采用稳压管提供一个相对稳定的基准电压,并通过同相放大在输出端得到一个稳定的输出电压。而由于运放具有一定的电源抑制比,所以在供电电压在一定范围波动时,其仍可正常工作。同向比例运放的输出电流有限,故采用了

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号