我必须在文件的倒数第二行 – file.txt中用“string”替换“pattern”.

以下三个sed命令能够打印倒数第二行.但我需要用“字符串”替换“模式”.任何帮助?

sed -e '$!{h;d;}' -e x file.txt

sed -n 'x;$p' file.txt

sed 'x;$!d' file.txt

$cat file.txt

cabbage

spinach

collard greens

corn salad

Sweet pepper

kale

如何替换文件的倒数第二行(甜椒):

一个.如果倒数第二行包含“甜椒”,则将“Sweet”替换为“green”

湾用“胡萝卜”代替整条生产线,无论它含有什么

要在第二行到最后一行将Sweet更改为Green,但仅当该行包含Sweet pepper时:

$sed 'x; ${/Sweet pepper/s/Sweet/Green/;p;x}; 1d' file.txt

cabbage

spinach

collard greens

corn salad

Green pepper

kale

要将整个倒数第二行替换为胡萝卜,无论它包含什么,

$sed 'x; ${s/.*/carrots/;p;x}; 1d' file.txt

cabbage

spinach

collard greens

corn salad

carrots

kale

这个怎么运作

让我们使用此命令并一次检查一步:

sed 'x; ${s/.*/carrots/;p;x}; 1d'

> x

这将交换模式空间(保存最近读取的行)和保持空间.

完成此操作后,保留空间将包含最近读取的行,并且模式空间将包含上一行.

(例外情况是我们刚读完第一行.在这种情况下,保留空间将有第一行,模式空间将为空.)

> ${s /.*/ carrots /; p; x}

当我们在最后一行(由$表示)时,模式空间保持倒数第二行,我们可以执行我们喜欢的任何替换或其他命令.当我们完成后,我们用p打印倒数第二行.最后,我们用x交换模式并再次保持空间,以便模式空间将再次包含最后一行. sed将打印这个,因为默认情况下,在命令的末尾,sed打印模式空间中的任何内容.

> 1d

当我们在第一行(由1表示)时,模式空间为空(因为没有前一行)并且我们将其删除(d).

一种更简单的方法

这种方法易于理解,代价是执行速度较慢:

$tac file.txt | sed '2 {/Sweet pepper/s/Sweet/Green/}' | tac

cabbage

spinach

collard greens

corn salad

Green pepper

kale

并且,对于胡萝卜:

$tac file.txt | sed '2 s/.*/carrots/' | tac

cabbage

spinach

collard greens

corn salad

carrots

kale

它是如何工作的:在这里,我们使用tac来反转线的顺序.注意:

$tac file.txt

kale

Sweet pepper

corn salad

collard greens

spinach

cabbage

通过这种方式,倒数第二行成为第2行.因此,我们只是简单地告诉sed在第2行操作.之后,我们再次使用tac来放置行,但顺序正确.

linux替换倒数第二个字符,sed – 替换文件倒数第二行的“模式”相关推荐

  1. oracle替换子字符串,oracle字符/字符串替换

    在ORACLE中的字符串替换 replce.regexp_replace 和 translate函数,下面我来给大家介绍一下. 在ORACLE中的字符串替换 replce.regexp_replace ...

  2. linux 上使用wc -l命令快速查看文件内容有多少行,以及如何匹配指定字符查看多少行

    1 linux的cat -n命令查看文件内容一共有多少行 1.cat -n命令查看文件多少行 cat -n filename 如:cat -n gallery_color_depth.txt - 2. ...

  3. linux shell sed 删除文件 前几行

    sed命令 不加参数i 就只看到结果,没写入a.txt文件,加 参数i 就写入了 如果有不大确定删除效果的,就先不加 参数i 1,删除首行 $ sed -i '1d' a.txt 2,删除前100行 ...

  4. 如何使用sed在文件中确定行插入带有变量的字符串

    背景 最近在研究一键部署,其中有一个环节,是要使用shell脚本放开防火墙的某个端口号 方法 使用shell中常见的插入文本命令:sed 问题 如果已经预知要打开的端口号如6379,可以使用:sed ...

  5. 用sed删除文件中指定行

    删除第N行: sed -i 'Nd' filename 删除第M到N行: sed -i 'M,Nd' filename sed -e '/abc/d'  a.txt   // 删除a.txt中含&qu ...

  6. linux 日志行数,如何实时查看日志文件新增的行数

    用python观察文件: #-------- track_file.py --------# import os def track_file(path, callback): "" ...

  7. Linux之awk:按照字符或列进行筛选与计算列值 条件动作

    1 语法 awk '条件1{动作1} 条件2{动作2}...'文件名条件(Pattern):一般使用关系表达式作为条件--x > 10判断变量x是否大于10 动作(Action):格式化输出流程 ...

  8. js将数组中的字符串按照第二个字符的大小排序(sort排序)

    输入为:["abc","bac","acb","acg","acz"] 输出为:["bac ...

  9. 将您重定向的次数过多什么意思_【linux二三轶事】重定向是啥?文件描述符是啥?...

    [前言] 写这篇文章的原因,是因为我在工作中遇到重定向和fd的时候,被这厮折磨的够呛.现在终于战胜了他们,当然要奏一首凯歌,率土同庆啦! 在开启正文之前,我们必须要先明白几个关键点,这对于理解后面的文 ...

最新文章

  1. 3400g主机用linux系统,最强整合平台!锐龙5 3400G小钢炮主机配置推荐
  2. react 子传参父_React 子组件给父组件传值、整个组件、方法
  3. java引用传递_理解Java中的引用传递和值传递
  4. 大型程序是如何开发的_小程序开发好之后如何引流
  5. python人脸检测与微信小程序_python+requests对app和微信小程序进行接口测试
  6. 2003退休去世领了2年退休金没回本就死了能退吗?
  7. C/C++函数的本质以及多线程函数的调用过程
  8. 编译安装LAMP对其性能压力测试
  9. adalm pluto_Apache Pluto Portlet&Struts 2集成示例教程
  10. Ajax 1.0 中使用web控件调用后台方法的用法.
  11. Spring 和SpringMVC 的父子容器关系
  12. 计算机网络局域网的组建实验报告,小型局域网组建实验报告
  13. 2022年北京航空航天大学计算机考研复试时间与复试内容
  14. WSJ Merkel Top On Forbes' Most Powerful Women List For 4th Year
  15. 使用Overleaf写作是参考文献引用没按顺序
  16. JavaScript中ubound函数
  17. Fiddler数据抓包试玩改包工具使用畅享
  18. Docker真正的入门
  19. python 列表迭代_Python | 以相反的顺序迭代列表
  20. HTML+JavaScript实现网页秒杀倒计时效果

热门文章

  1. 2022年第十三届蓝桥杯 python B组 第B题 寻找整数
  2. 智慧商业零售商业模式是什么,智慧商业零售商业模式有那些,智慧零售数据采集维度
  3. [转帖]μTorrent官方FAQ翻译+如何使用RSS在Mininova下载torrent
  4. html 阅读排版模板,HTML5简洁的黑白色调时间轴事件排版模板
  5. Mac OS 系统监控工具 iStat Menus 6.11 安装
  6. css宋体代码_css字体样式
  7. java word文档生成_java生成word文档
  8. linux中.bashrc 等文件中的rc是什么意思
  9. 神医“大数据” 甘做幕后英雄
  10. 浅谈android中加载高清大图及图片压缩方式(二)