我的哈希文件采用以下形式:
SHA1(disk.iso)= 43798473890473280573920473902472083947320
我需要用新哈希替换旧哈希。
我一直试图修改一些旧代码而没有运气:
sed -i 's/SHA1(disk.iso)"[^+]*"/"'" $HASH"'"/' manifest
这里有什么想法吗?
*更新*
上面列出的刺痛是正确的:
SHA1(disk.iso)=(这里有一些SHA1哈希。注意等号后的空格。)
以下是当前代码:
sed -i "s/\(SHA1(disk.iso)=\).*/\1 $HASH/" manifest
但仍然没有。这不会修改有问题的行。
*解决方案*
这项工作:
sed -i "s/\(SHA1(disk.iso)=\).*/\1 $HASH/" manifest
我的文件名错了。谢谢Janos
答案 0 :(得分:2)
你走了:
sed -i "s/\(SHA1(disk.iso)=\).*/\1 $HASH/" manifest
那是:
\(...\)
内捕获文件名,并将该行的其余部分与.*
\1
,并附加$HASH
这是另一种做同样事情的变体:
sed -i "/^SHA1(disk.iso)/ s/=.*/= $HASH/" manifest
那是:
SHA1(disk.iso)
=
= $HASH
符号及其后的所有内容
答案 1 :(得分:1)
你可以这样做(如果你现在是哈希):
sed -i "s/$OLDHASH/$NEWHASH" manifest
如果您不了解它们并且只想用SHA1(disk.iso)
替换任何一行,
你可以写:
sed -i "s/\(SHA1(disk.iso)=\).*/\1 $HASH/"
\(\)
这里的意思是反向引用;这意味着您将该行保存在寄存器中,稍后将使用\1
使用该行。当然,你可以直接写:
sed -i "s/SHA1(disk.iso)=.*/SHA1(disk.iso) $HASH/"
但在这种情况下,不可能写出像[123] .iso这样的东西 一次匹配多个ISO。
答案 2 :(得分:1)
两个步骤:
通常使用
执行此操作cat myHashFile.txt | sed '/SHA1(disk.iso)/ {s/\d+/'$HASH'/}' > newHashFile.txt
/.../
中的第一项通常采用正则表达式“将符合条件的行应用于符合此条件的行”
{..}
中的第二部分是命令:
s substitute
\d any digit
\d+ one or more digits (greedy)
$HASH replace with the contents of the $HASH variable