Linux:文本三剑客之sed编辑器

一、sed

1.1 sed编辑器

  • sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
  • sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中

1.2 sed编辑器的工作流程

  • 1、读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。

  • 2、执行:默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址否则sed 命令 将会在所有的行上依次执行

  • 3、显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完

  • 注意:默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出

1.3 命令格式

sed -e '操作' 文件1 文件2 ...      #-e后面跟操作,也可以根下面一样用大括号跟多个操作#
ed -e 'n{                      
操作1
操作2
...
}' 文件1 文件2 ...
sed -n -e '操作' 文件1 文件2 ... #sed命令默认会把执行的内容发到屏幕上,-n可省略,不加-n加p的话会把操作的行
sed -f 脚本文件 文件1 文件2 ...
sed -i -e '操作' 文件1 文件2 ...

1.4常用选项

选项说明
-e 或 --expression=用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用
-f 或 --file=用指定的脚本文件来处理输入的文本文件
-h 或 --help显示帮助
-n、--quiet 或 silent禁止sed编辑器输出,但可以与p命令一起使用完成输出
-i直接修改目标文本文件(先实验,确定没问题再用,并且备份源文件)

1.5 常用操作

选项说明
s替换,替换指定字符
d删除,删除选定的行
a增加,在当前行下面增加一行指定内容
i插入,在选定行上面插入一行指定内容
c替换,将选定行替换为指定内容
y字符转换打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用,转换前后的字符长度必须相同
=打印行号
l打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t、回车符\r

1.6 实际应用

  • 查询
sed -n '行号 p'      #打印指定行号的行#
sed -n '行1,行2 p'  #打印行1与行2区间的行#
sed -n '1,+n p‘     #打印行1与其之后连续n行#
sed -n ’/字符串/ p'  #打印包含字符串的行#
sed -n ‘/正则表达式/ p' #打印包含字符串的行#
  • 删除
sed '行号 d'               #删除指定行号的行#
sed '行1,行2 d'            #删除行1与行2区间的行#
sed '/字符串/ d'           #删除包含字符串的行#
sed '/正则表达式/ p'        #删除所有包含正则能够匹配的到内容的行#
sed '行号,/字符串/ d'       #删除从指定行到第一个包含字符串的行#
sed '/字符串1/,/字符串2/ d' #从第一个包含字符串1的行开始删除到从第一个包含字符串2的行,之后的行会重复之前的规则操作#
  • 替换
sed 's/旧字符串/新字符串/'             #替换匹配行的第一个对应的字符串#
sed 's/旧字符串/新字符串/2'            #替换匹配行的第二个对应的字符串#
seds '/旧字符串/新字符串/g'            #替换匹配行的所有对应的字符串#
seds '/旧字符串/新字符串/gw file'      #把替换后的行内容保存到指定文件#
sed -n 's/旧字符串/新字符串/gp’ > file #同上#
sed '行号 s/旧字符串/新字符串/g'        #替换指定行的对应的字符串#
sed '行1,行2 s/旧字符串/新字符串/g'     #替换行1与行2区间的匹配行的对应的字符串#
sed '/字符串/ s/旧字符串/新字符串/g'    #替换带有字符串的行,把旧字符全换成新字符#
sed '/正则表达式/ s/旧字符串/新字符串/g' #替换满足匹配条件的行,把旧字符全换成新字符#
s/xx/XX/                             #后面的替换分隔符可以使用其他字符代替,需要确保三个分隔字符保持一致#
例子:s?xx?XX?                        #像/bin/bash/这种换成其他字符,就需要再斜杠前面加反斜杠,那个时候会看的很累,所以可以用别的字符来代替,例如’?‘之类#
sed '行号c XXXX'                      #替换指定行的整行内容#
sed 'y/abc/123/'                     #替换所有相对应的字符#
sed 's/.*字符串.*/#&/'                #'&'代表前面匹配到结果的行,在前面加个’#‘#
  • 插入
sed '行号a xxxx'                                  #在指定行下面插入内容#
    '/字符串/a xxxx'
sed '行号i xxxx'                                  #在指定行上面插入内容#
    '/字符串/i xxxx'
sed '行号r file'                                  #在指定行下面读取文件内容#
sed '/root/(H;d);$G' /etc/passwd                  #将包含root的行剪切到末尾,H表示复制到剪切板,G表示粘贴到指定行后,没有d的话,有复制粘贴的意思,有d的话,是剪切粘贴的意思#
sed '1,3H;5,7G‘  /etc/passwd                      #将1到3行的内容复制到5到7行下面#
echo ”111222333“ | sed -r 's/(111)(222)/\2\1/'    #将字符 111 和 222 互换位置#
echo "111222333" | sed -r 's^(.)(.*)(.)$/\3\2\1/' #将第一个字符和最后一个字符互换#
  • 例子
sed -n -e '=' -e 'p' b.txt #只执行一个操作的情况下-e加不加效果一样#
one
two
...

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

cat b.txt | sed -n '=;p' #多个命令之间可以用’;‘来进行分割#
1
one
2
two
...

在这里插入图片描述

在这里插入图片描述

cat a.txt | sed -n '3p' #’p'前面加数字,表示打印指定行的内容#
100
cat a.txt | sed -n '$p' #‘$p'表示最后一行的内容#
777
cat a.txt | sed -n '8,$p' #第八行到最后一行的内容,用’,‘分割#
333
34
...
cat a.txt | sed -n '8p;$p' #只显示第八行和最后一行的内容,用’;‘表示前一个结束#
333
777
cat a.txt | sed -n '8,+3p' #显示第八行以及它后面连续的3行#
333
34
333
444
cat a.txt | sed '8q' #显示前8行然后退出#
1
10
100
...
3
333
cat b.txt | sed -n 'p;n' #只显示奇数行#
one
three
...
thirteen
cat b.txt | sed -n 'n;p' #只显示偶数行#
two
four
...
tweleve

在这里插入图片描述
在这里插入图片描述

cat b.txt "| sed -n '2,${n,p} #从第二行开始到结尾,执行先换行再打印的命令#
three
five
seven
nine
eleven
thirteen

在这里插入图片描述

sed -n '/^root/p' /etc/passwd        #过滤出以root开头的行#
sed -nr -e '/root|ftp/p' /etc/passwd #包含root或者ftp的行,因为‘|’是特殊符号,前面要么加-r,要么管道符前面加反斜杠#
sed -n '2,/ftp/' /etc/passwd         #从第二行开始到第一个带有ftp行结束#

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux 的三剑客指的是 awk、sed 和 grep。 awk 是一种用来处理文本文件的工具,它可以根据指定的模式进行自动分割并进行数据处理。 sed 是一种流编辑器,它可以对文本文件进行替换、删除和插入操作。 grep 是一种文本搜索工具,它可以在文本文件中搜索指定的字符串。 ### 回答2: Linux剑客,分别是awk、sed和grep,它们是Linux系统中非常重要的命令行工具,它们通常被称为文本处理工具。这些工具通常被用于筛选、搜索和处理文本文件。 grep是一种常见的文本搜索工具,可以在文件和文件夹中搜索指定的字符串或正则表达式。grep可以搜索多个文件并返回匹配行的输出。它是处理日志文件或查找匹配模式的最佳工具之一。 sed是一种流编辑器,可以按照行处理文本文件。它可以通过替换、删除和插入操作来修改文件内容。在大型文件中查找并替换模式是sed的主要作用。该工具通常在文本文件中提取有用信息是常用。 awk是一种强大的文本操作工具,可以分析大型文本文件并对其进行处理。该工具可以遍历行和列,并提供强大的文本处理工具,如计算、过滤和转换数据。awk的处理速度非常快,适用于处理大型数据文件。 Linux的三剑客中awk是最强大的工具,它可以执行复杂的文本数据操作和转换,可大大简化开发和管理过程。sed主要用于简单的文本数据过滤和替换,而grep主要用于搜索文件和定位特定行。 总之,Linux剑客文本数据处理方面具有不可替代的重要作用。对于Linux操作系统的开发人员和管理员来说,熟练使用这些工具可以提高他们的工作效率,使他们更容易管理和操作文本文件。 ### 回答3: Linux剑客awk sed grep是我们在日常工作中经常使用的三个命令。它们都属于文本处理工具,可以用于查找、处理、分析文本文件等。 首先,grep是最常用的文本搜索工具。grep可以用来快速查找文件中指定的字符串或正则表达式,并将包含该字符串或正则表达式的行打印出来。常用的命令有grep、egrep和fgrep。比如,我们可以使用grep命令来查找一个文件中包含指定关键字的行,可以使用egrep来支持正则表达式搜索,使用fgrep来进行快速搜索,不支持正则表达式。 其次,sed是一种流编辑器,主要用于对文本文件进行替换、删除、添加、插入等操作。sed命令可以通过管道(|)将多个命令组合起来,从而进行复杂的文本操作。sed可以快速完成对文本文件的修改操作,比如替换文件中的某些内容、删除特定的行、在文件中插入新的文本等。sed的命令形式是“command", 比如"s/old/new/g",表示将old替换成new。 最后,awk是一种强大的文本处理工具,主要用于在文本文件中查找、处理以及格式化特定的字段。和grep、sed不同的是,awk更加灵活,可以在处理过程中做到数据过滤和加工,对于大数据的处理特别有用。awk命令的常用语法是"pattern {action}"。其中,pattern代表要匹配的模式,而action代表模式匹配时需要执行的动作,我们可以在其中添加处理语句来对文件进行各种处理操作,比如计算、统计、格式化等。 综上所述,Linux剑客awk sed grep是我们在文本处理工作中不可或缺的三个工具,不同的工具可以用于处理不同的文本操作,也可以用于搭配使用,以完成更加复杂的文本处理工作。对于需要经常处理文本的人员来说,掌握这些工具是非常必要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值