【发布时间】:2023-03-20 07:10:02
【问题描述】:
我正在编写一个脚本,使用sed 在一个文件中查找一个字符串 - temp.txt(版本号),然后获取该字符串并更新另一个文件中的版本号。这里是相关代码sn-p。
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 版本,因为这个脚本不会只在我的计算机上运行。所以任何解决方法都是理想的。
谢谢
【问题讨论】:
-
在 Mac *Nix 或 Linux 上,-n 选项并不像您认为的那样。您应该查阅手册页以获取更多详细信息。
-
在 Mac 上为我工作。简化;尝试让
sed -n '/version: /p' temp.txt先工作。 -
@Beta 嗯,这让我很困惑。我没有处理您让
sed -n '/version: /p' temp.txt工作的建议。仅该命令仍会打印出整个文本文件 temp.txt。哇?就好像整个文件被视为一行一样。 -
当你说整个文件时,我们指的是多少行?
-
Sed 不适用于老式 mac 风格的行尾,如果您的文件正在使用它们。试试
$ file temp.txt。如果它显示temp.txt: ASCII text, with CR line terminators,那就是你的问题。