【发布时间】:2014-12-08 19:46:09
【问题描述】:
我目前有以下命令代码块,它将比较两个文字字符串,如果它们不相等,则将其替换为预期的内容。虽然如果实际字符串只有一个实例,这会非常有效,但我该如何改进它,以便它只会替换第一个发现并删除其他发现?
if [ "$actualString" != "$expectedString" ]; then
sed -i 's|$actualString|$expectedString|g' /tmp/test
fi
编辑:我将处理 ssh 键,因此 $actualString 将是一个键,或者在多次出现的情况下,不同行上有多个键。比如:
key user1@host1
key user2@host2
key user1@host1
key user3@host3
key user1@host1
我只想将具有 user1@host1 的第一个实例替换为“monkey user1@host1”,然后删除其余实例。我正在寻找要更新的文件
monkey user1@host1
key user2@host2
key user3@host3
【问题讨论】:
-
在
sed命令中使用单引号意味着$actualString和$expectedString的值不会被扩展。也许你应该更新你的问题。另外,您是在询问同一行上的多个实例,还是在不同行上出现的情况? -
根据请求更新。
-
您是否按照建议尝试了我的 perl 命令?
-
我做到了。如何获取它来更新实际文件?