1

我正在编写一个脚本sed,用于在一个文件中查找字符串 - temp.txt(版本号)并获取此字符串并更新另一个文件中的版本号。这是相关的代码片段。

new=$(sed -n '/version: /p' temp.txt)  
sed -i .bk "s/version: [.0-9]*/version: $new/" file2.txt

我遇到的问题是该变量new不只占用带有版本号的一行,而是占用整个文件file2.txt。这使我相信该-n命令的一部分不起作用,因为这应该禁止打印所有行,但其中包含字符串version的行。

我认为这可能是sed我正在使用的版本(在 Mac 上)的问题。或者我可能使用sed错误的命令。任何帮助,将不胜感激。

我宁愿不更新我的版本sed,因为这个脚本不仅仅在我的计算机上运行。因此,任何解决方法都是理想的。

谢谢

4

1 回答 1

0

我假设你temp.txt看起来像这样:

# some text
version: 3.14
# more text

和你的file2.txt类似。只有一个“版本:”存在。

如果是这样,您可以使用以下脚本:

#!/bin/bash
new=$(cat temp.txt | grep version: | sed "s/ //g" | cut -d ":" -f 2)
sed -i "bk" -E "s/version:.*/version: ${new}/" file2.txt

第一个命令查找写入版本的行。我sed用来删除任何多余的空间,并cut提取版本号。例如,使用此命令版本号也可以是“3.6.7a”。

在第二个命令中,我将替换写入旧版本的行。注意我不关心“版本:”字符串后面的内容,因为我将用我的新版本号替换它。此外,我正在保存file2.txtinto的备份file2.txt.bk

于 2014-11-24T01:55:47.910 回答