【发布时间】:2020-01-27 13:39:35
【问题描述】:
这是我的问题:
- 给定一个文本文件。
- 每行中的数据未知。
- 需要将第 3 行替换为第 5 行。
- 要替换的行号和要替换的行号是给定的并且是常数。
- 行号永远不会是第一行,也不是最后一行。
- 文件行数不变
运行代码之前
A34JC
P1@%NWA]
MM1 //Line to be replaced
M@K(FD
BWKD //Line to replace with
Z
运行代码后
A34JC
P1@%NWA]
BWKD //Data in Line 3 was replaced with the data from line 5
M@K(FD
BWKD
Z
我真的不介意使用 shell、sed(或 awk,虽然我不熟悉)。从我在这里看到的我尝试了以下
sed 3s/.*/???/ file1.txt > file2.txt
我很尴尬地说我在??? 尝试过的事情。我知道我可以在那里手动插入文本,但问题是我不知道第 5 行包含什么数据。
我也尝试了各种替换方法,但结果更糟。
sed 3d;5r file1.txt file1.txt > file2
总之,我一无所知。
更新
Potong 的第一个解决方案对我不起作用,但替代工作。我现在有一个延续问题。
所以情况是这样的——我不得不一直重复一个非常烦人的过程。无需过多介绍:
- 我正在运行 Windows。
- 我有一个包含进程 ID 编号的文本文件,每个编号下都是属于特定进程的设置。
- 每次我重新启动进程时,进程 ID 都会更改。
- 进程新ID自动写入txt文件。
- 我没有从头开始设置进程设置,而是简单地复制新随机生成的进程 ID 号,并擦除现在只是垃圾的设置数据。
- 有 4 个这样的进程同时运行。所以他们总是一起添加和更改。
到目前为止,这是我的想法:
注意:我添加了 -i 以保存对同一文件所做的更改
.\sed -E -i '28{:a;N;60!ba;s/[^\n]*(.*\n(.*))/\2\1/}' config.txt
.\sed -E -i '36{:a;N;64!ba;s/[^\n]*(.*\n(.*))/\2\1/}' config.txt
.\sed -E -i '44{:a;N;68!ba;s/[^\n]*(.*\n(.*))/\2\1/}' config.txt
.\sed -E -i '52{:a;N;72!ba;s/[^\n]*(.*\n(.*))/\2\1/}' config.txt
您可以看到 28,36,44,52 和 60,64,68,72 是系列。
以下是我需要更多帮助的地方:
我想自动运行所有 4 个命令,例如作为 .bat 文件或类似文件。它可以使用.bat文件吗?
我知道 cmd 要求我从命令中删除 ',并且可能会添加行而不是覆盖。它在 power shell 中运行良好,但我是否需要制作一个 .bat 文件以在 power shell 上运行?
我想在最后添加一个命令来删除第 60 行及以后的所有内容。我怎么做?
【问题讨论】:
-
使用编辑器正确标记代码和数据(
{}键或前置 4 个空格),就像现在一样,阅读起来很混乱。另外,发布一些具有预期输出的示例数据。 -
谢谢。抱歉,这是我在这里的第一条消息,我完全不确定如何使用论坛或代码...我确实觉得我发布了具有预期输出的示例数据,不是吗?有人帮我修好了。所以谢谢你,我会在下一篇文章中做得更好