gpt4 book ai didi

linux - 替换特定位置的单词

转载 作者:太空宇宙 更新时间:2023-11-04 10:23:11 25 4
gpt4 key购买 nike

我想在扫描一系列参数的同时运行程序我需要在不匹配任何模式的情况下替换特定位置的单词

例如我的输入文件包含以下几行:

...  
coords xyz
O 0.0 0.0 0.0
H 1.0 1.0 0.0
H 1.0 -1.0 0.0
...

我想在每次迭代中用不同的 ($i) 值替换第 66 行中的第 3 个单词(在此示例中为“-1.0”)

我知道我可以维护一个 original_input 文件,每次进行模式搜索并将其输出到一个输入文件:

sed  "6s/-1.0/$i/" original_input > Input 

但我正在寻找一个就地替代,而比赛模式不断变化

最佳答案

我在翻译
“就地替换”作为
“替换由行号和字号给出的位置”
并且“匹配模式”在示例案例中指的是“-1.0”,您不希望在实现中进行硬编码。
我希望“不匹配任何模式”的要求仅指实际替换,允许在其他地方进行更通用的模式匹配。

我提出的解决此问题的实现方案:

bash-3.1$ sed -E "4s/(\s*(\S+\s+){2})\S+(\s+|$)/\1$i\3/;" input.txt

给定样本输入(不带“...”)的输出,对于 $i==5:

coords xyz
O 0.0 0.0 0.0
H 1.0 1.0 0.0
H 1.0 5 0.0

在执行中
"4"是行号,
“2”是字数(从0开始计数)。

在输出中“5”是替代品。

正确的行号已经被你解决了。
我通过在正则表达式中要求前面的“nonwhitespace + whitespace”的正确数字 {n} 来完成单词编号,即 \S+\s+

关于linux - 替换特定位置的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42956709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com