linux - 使用 tac 和 sed 反转文件

标签 linux bash sed scripting

我有一个用例,我需要在其中搜索并替换文件中最后一次出现的字符串,并将更改写回文件。下面的案例是该用例的简化版本:

我正在尝试反转文件,进行一些更改以再次将其反转并写入文件。为此,我尝试了以下代码片段:

tac test | sed s/a/b/ | sed -i '1!G;h;$!d' test

测试是一个包含内容的文本文件:

a
1 
2 
3
4
5

我原以为这个命令不会改变文件的顺序,但它实际上将内容反转为:

5
4
3
2
1
b

如何进行替换并保持文件的顺序?

最佳答案

您可以tac 您的文件,在第一次出现所需模式时应用替换,再次tac 并将tee 结果保存到您之前的临时文件中用原来的名字重命名:

tac file | sed '0,/a/{s//b/}' | tac > tmp && mv tmp file

关于linux - 使用 tac 和 sed 反转文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45151642/

相关文章:

css - 如何将 `diff`文件创建一个 "common"文件?

node.js - bash: npm: 在 Linux 上安装 Nodejs 后找不到命令

linux - gstreamer tcpclientsink 连接被拒绝

linux - 计算以符号开头的行数

unix - 仅打印字符串中的第一个字段

macos - 当 -i 参数不受支持时,如何使用 grep 和 sed 替换多个文件中的字符串?

Linux根据文件名模式批量复制文件到目录

c++ - 使用 usleep 控制循环时间

bash - 创建非线性管道的最干净的方法是什么?

bash - 使用 awk 进行无放回采样