Shell编程基础(十五)文本三剑客(sed)

这篇具有很好参考价值的文章主要介绍了Shell编程基础(十五)文本三剑客(sed)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用场景

sed提供了一种免交互的方式修改文件内容。
它是一行一行处理,可以通过正则匹配要修改的部分

基本语法

  • 基本语法
    sed [-opt] command files(多个文件 空格隔开)

  • sed 使用扩展正则,不加r不能完全匹配扩展正则表达式
    sed -r “正则匹配数据行/指定行号 sed命令” files

  • sed 修改内容写回文件
    默认,sed操作完的数据会显示在控制台,而不会回写到文件中; 若要将变更保存到文件可以使用 -i 选项

    sed -r -i “/正则表达式/或者指定行号 + [{]sed命令[}]” files
    sed 命令可以使用 {} 括起来,也可以不写,写了意思更明确。

如果要对选中的行执行多个操作可以使用 分号(;) 隔开 sed命令

sed -r "\regex expression\{s;r}" file
  • 行号表示法匹配多行使用逗号分割两个行号($ 表示最后一行
# 删除 1 到 2 行
sed -r "1,2{d}" file 
  • sed 命令中引用变量

通常在 单引号’ ’ 内使用sed 命令,但单引号 ’ ’ 会将内部字符强制转义,使其无法引用到变量。
此时需使用 双引号 " " 定义sed命令,但此时有可能引发其他字符需转义,这时需使用反斜杠 \ 单独对字符进行转义。

# 将最后一行替换为 变量abc的值 123
var abc=123
sed -r "\$ c $123" file

实例

命令列表

  • d 删除匹配的行
    // 删除正则匹配的行
    sed -r “/正则表达式/{d}” file
    // 删除指定行
    sed -r “行号{d}” file

    • 按正则表达式删除
    sed -r "/regex expression/d" file
    
    • 删除第二行
    sed -r "2 {d}" file
    sed -r "2d" file
    sed -r "2{d}" file
    
    • 删除 2-5行
    sed "2,5 {d}" file
    sed "2,5{d}" file
    
    • 删除5行到最后一行
    sed -r "5,$ {d}" file
    sed -r "5,${d}" file
    sed -r "5,$d" file
    
    • 删除最后一行
    sed -r "$ {d}" file
    sed -r "${d}" file
    sed -r "$d" file
    
  • s 替换匹配上的字符
    sed -r “s/正则查找的内容/要替换的内容/” file
    也可以使用 # 分割,当要替换的内容中有/或其他特殊含义字符时可以使用#,或者使用转义
    sed -r “s#正则查找的内容#要替换的内容#” file

    默认,只会替换每一行中的第一个匹配上的字符串;如果要全部替换,需要在最后的 / 后加个g,代表行内匹配上的字符串都替换

    # 将含有 abc 的行 的第一个 abc 换成 def
    sed -r "s/abc/def/" file
    
    # 将含有 abc的行 的所有 abc 都换成 def
    sed -r "s/abc/def/g" file
    

    sed 的 s 命令中,如果要引用查找到的字符串可以使用() + \1 或 &(&获取的是整个查找条件而忽视() ) 获取
    和 vim 中 类似。

    # 匹配abcd ,然后在然后取出abc,再在后面拼接123,最终结果是 abcd 换成 abc123
    # ;\1 代表前面第一个()内的内容,依次递增;&取的值是 整个条件命中字符串,而仅仅不是()中的内容
    sed -r 's/(abc)d/\1123/' file
    结果就是  abc123
    

    s 命令如果要按照行号进行匹配,则需要将行号放到 s前面一般使用行号,是针对整行进行操作,要么替换整行 要么 在前后追加

    # 行首插入 123,有以下三种写法
    sed -r '1 s/^/123/' file  # ^ 代表行首字符,将^ 替换为123
    sed -r '1 s/(.*)/123\1/' file
    sed -r '1 s/.*/123&/' file
    
    # 行尾插入 123,有以下三种写法
    sed -r '1 s/$/123/' file # $ 代表行首字符,将$ 替换为123
    sed -r '1 s/(.*)/\1123/' file
    sed -r '1 s/.*/&123/' file
    
    # 整行替换 为 123 等同于 c 命令
    sed -r '1 s/(.*)/123/' file
    sed -r '1 s/.*/123/' file
    
  • r 读取文件,写入到sed指定的文件
    读取一个文件的内容,默认会追加到 sed指定的文件中的每一行下面。
    如果要追加在目标文件的指定行的下面,
    可以在 r前面加上行号同样,这里可以使用$表示最后一行
    还可以使用正则匹配行,在匹配上的每一行下面都会追加读取到的内容,注意正则表达式使用 / / 分割

# 取sourcefile的内容, 追加到 destfile每一行后面
sed -r 'r sourcefile' destfile

# 读取sourcefile的内容, 追加到 destfile最后一行后面
sed -r '$r sourcefile' destfile

# 读取sourcefile的内容, 追加到 destfile第一行后面
sed -r '1r sourcefile' destfile

# 读取sourcefile的内容, 追加到 正则表达式匹配上的每一行后面
sed -r '/正则表达式/r sourcefile' destfile
  • w 写入文件,读取sed指定文件的内容写入另一个文件
    将 sed指定的文件 sourcefile,另存为另一个文件 destfile
    同样可以使用 行号或者 正则,选中想要保存的部分行,这样就是匹配上的行保存到目标文件中。
# 将 整个sourcefile文件内容写入 destfile
sed -r 'w destfile' sourcefile

# 将sourcefile文件 指定行写入 destfile
sed -r '1w destfile' sourcefile

# 将sourcefile文件 指定范围行写入 destfile
sed -r '1,5w destfile' sourcefile

# 将sourcefile文件 正则匹配上的行 写入 destfile
sed -r '/正则表达式/w destfile' sourcefile
  • a 追加内容,在匹配行下面写入数据
    和上面一样,可以使用固定行号,范围行号以及正则表达式匹配要追加的行,不限制时,应用到每一行。
    追加多行可以使用 \n 转义实现
# 给file文件每一行下面添加一行 123 
sed -r 'a 123' file

每一行下面追加两行123
sed -r 'a 123\n123' file
  • i 插入内容,在匹配行上面写入数据
    规则与上面 a 类似,只是内容写到匹配行的上面

  • c 替换匹配上的整行内容
    规则与上面a 类似,对匹配上的行,整行替换

# 第一行替换为 123
sed -r '1c 123' file

# 第一行到第二行替换为 123
sed -r '1,2c 123' file

# 匹配上正则的行 替换为 123
sed -r '/正则表达式/c 123' file
  • n 匹配当前行,组合其他sed命令作用到下一行
    需与其他命令结合使用,n命令仅仅用于查找,组合的其他命令才是作用到下一行的命令
# 删除第二行
sed -r '1n;d' file
  • ! 反选;对匹配的结果取反(!放在查询条件之后,与常规的取反操作放在最前面不同),然后应用后面的sed命令
# 删掉 除了第一行的其他行
sed -r '1! d' file

# 删掉 正则 不 匹配的行
sed -r '/正则表达式/! d' file
  • e 多次编辑,
    正常sed 只能应用一次编辑
    类似
sed -r '1 d' file

如果想一个命令执行多个独立的编辑操作,可以使用-e

# 删除第一行 & 第二行的aa换成bb
sed -r -e '1 d'  -e '2 s/aa/bb/' file

当然,也可以使用分号(;)隔离多个独立的 查找应用 命令

# 删除第一行 & 第二行的aa换成bb
sed -r  '1 d;2 s/aa/bb/' file

如果是对同一行执行多个操作可以使用分号(;)隔离多个sed 应用命令文章来源地址https://www.toymoban.com/news/detail-635076.html

# 第二行的 aa换成bb & 第二行的 cc换成dd
sed -r  '2 {s/aa/bb/;s/cc/dd/}' file

到了这里,关于Shell编程基础(十五)文本三剑客(sed)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux文本三剑客(grep、sed、awk)

    目录 grep 1、什么是grep和rgrep? 2、使用grep 2.1、命令格式 2.2、命令功能 2.3、命令参数 3、实战演示 sed 1、认识sed 2、使用sed 2.1、命令格式 2.2、常用选项options 2.3、地址定界 2.4、编辑命令command 3、sed用法演示 3.1、常用选项用法演示 3.2、sed地址定界演示 3.3、编辑命令command演示

    2024年02月03日
    浏览(32)
  • Linux文本三剑客---grep、sed、awk

    awk、grep、sed是linux操作文本的三大利器,三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。 1、grep 1.1 命令格式 1.2命令功能

    2024年02月14日
    浏览(34)
  • Linux 文本处理三剑客:grep、sed 和 awk

    awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较

    2024年01月17日
    浏览(40)
  • Linux:管道命令与文本处理三剑客(grep、sed、awk)

    众所周知,bash命令执行的时候会输出信息,但有时这些信息必须要经过几次处理之后才能得到我们想要的格式,此时应该如何处置?这就牵涉到 管道命令(pipe) 了。管道命令使用的是 | 这个界定符号。另外,管道命令与连续执行命令是不一样的,这点下面我们会说明。 我们先

    2023年04月18日
    浏览(31)
  • Shell脚本攻略:文本三剑客之grep

    目录 一、理论 1.grep 2.sort 3.uniq 4.tr 5.cut 6.split 7.paste 二、实验 1. grep ​编辑 ​编辑 2.sort 3.uniq ​编辑 4.tr 5.cut 6.split 7.统计当前主机的连接状态 8.统计当前连接主机数 9.获取信息 (1)概念 grep是Linux中最常用的”文本处理工具”之一,grep与sed、awk合称为Linux中的三剑客。 grep的

    2024年02月07日
    浏览(35)
  • Shell脚本攻略:文本三剑客之awk

    目录 一、理论 1.awk原理 2.awk打印  3.awk条件判断 4.awk数组与循环 5.awk函数 6.常用命令 二、实验 1.统计磁盘可用容量 2.统计/etc下文件总大小 3.CPU使用率 4.统计内存 5.监控硬盘 (1)概念 awk由 Aho,Weinberger 和 Kernighan 创建的文本模式扫描和处理语言。 awk非常复杂,所以这不是一

    2024年02月08日
    浏览(36)
  • Liunx shell编程及自动化运维实现--第五章三剑客

    正则表达式(RE)是一种字符模式,用于再查找过程中匹配指定的字符,在大多数程序中,正则表达式都被置于两个正斜杠之间:例如//就是由正斜杠界定的正则表达式,他将匹配被查找的行中任何位置出现的相同模式。在正则表达式中,元字符时最重要的概念。 定义:元字

    2024年02月21日
    浏览(24)
  • linux命令三剑客grep、sed、awk

    准备 grep、sed、awk号称\\\"linux三剑客\\\",使用频繁,功能强大,本文通过一个实例演示下基本用法。首先准备一个文本文件,命名为text.txt,写入文件内容: grep 首先,最简单的是grep。经常用来过滤查看日志。对于grep需要知道如下几个常用的命令选项: -n: 额外输出行号。例如过

    2024年02月05日
    浏览(59)
  • Linux中字符处理三剑客(grep sed awk )

    在 Linux 系统中,字符处理流程可以利用三个常用的工具来完成,三剑客的具体说明如下: grep:grep 是一种强大的文本搜索工具,可以搜索文件内容中包含指定文本的行,并打印出包含该文本的行。grep 命令通常用于搜索日志文件、配置文件等。 在Linux中,\\\"grep\\\"是一种文本搜索

    2024年02月08日
    浏览(32)
  • Linux三剑客grep、sed、awk(包括练习题)

    Linux grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。 基本用法与常见的正则表达式 扩展正则表达式实践 此处使用grep -E 进行实践扩展正则,egrep官网已经弃用 注意:sed和awk使用单引号,双引号有特殊解释 sed是Stream Editor(字符流编辑器)的缩写

    2024年02月11日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包