gpt4 book ai didi

unix - 使用 grep 和 sed 将一个字符串替换为另一个字符串

转载 作者:行者123 更新时间:2023-12-04 18:16:40 26 4
gpt4 key购买 nike

我想用另一个文件中的字符串替换一个文件中的一个字符串。虽然我对这些命令没有经验,但我希望 grep 和 sed 的某种组合会做得最好。

使这更复杂的是我不知道这两个字符串是什么(我正在尝试自动替换文档上的版本号)。我知道在这两种情况下,我正在寻找的字符串(比如“2.3.4”)前面都有“版本:”

所以我可以说'在“版本:”(我们称之为string1)之后查找单词(或其余行或任何可能的)并在另一个文件中执行相同操作(给出string2)并将字符串string1替换为string2。

以下是一些示例文本文件:

文件1.txt

This is a file containing
the updated version number.
version: 2.3.4
here is a string with more info



文件2.txt

This is a configuration file
It could contain an old version number
version: 2.3.2
Please update this



因此 file2.txt 的预期输出将变为:

文件2.txt

This is a configuration file
It could contain an old version number
version: 2.3.4
Please update this



谢谢

最佳答案

如果您有 sed支持-i选项,

sed -i 's/version: .*/version: 1.2.3/' file1 file2 file3 ...

您可能需要调整正则表达式通配符; .*匹配到行尾,而 [.0-9]*匹配最长可能的点和数字序列。您可能还希望允许周围空白的变化...但是由于这可能是该站点上前 10% 的常见问题解答之一,因此请在这一点上寻找类似的问题。

从 file1 获取替换字符串并将其应用于 file2、file3 等,例如
new=$(sed -n 's/version: //p' file1)
# Use double quotes, not single, in order to expand $new
sed -i "s/version: [.0-9]*/version: $new/" file2 file3 ...

第一个 sed调用将仅打印找到并删除“版本:”的行(替换为空字符串)。大概文件中只有这样的一行。将输出通过管道传输到 head -n 1uniq什么的,或者找到/创建一个更精致的 sed脚本。

您通常在文字字符串周围使用单引号,但由于您不需要文字 $new在替换中,我们使用双引号,它允许 shell 在带引号的字符串中执行变量替换(以及我们在这里不涉及的许多其他替换)。

关于unix - 使用 grep 和 sed 将一个字符串替换为另一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11536975/

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