我有一组想要匿名的哈希值。使用 GNU sed (v4.9),如何仅用其他内容替换部分散列?特别针对我的情况,我想保留
$
符号(如果存在),但前提是它直接位于 :
前面。
示例:
USER:1234:aad3b435b:abcdef:::
COMPUTER$:4321:aad3b435b:abcdef:::
DOMAIN\bleh:5678:eaad3b4:fedcba:::
DOMAIN\$why:5678:eaad3b4:fedcba:::
使用以下命令我几乎能够得到我想要的
sed 's/[^$:]\+/REDACTED/1'
REDACTED:1234:aad3b435b:abcdef:::
REDACTED$:4321:aad3b435b:abcdef:::
REDACTED:5678:eaad3b4:fedcba:::
REDACTED$why:5678:eaad3b4:fedcba:::
但是,可以看出,这个 sed 正则表达式与最后一个条目的匹配错误。应该是
REDACTED:5678:eaad3b4:fedcba:::
sed 命令应该替换行开头
^
和 $:
OR :
之间的任何内容。
我不知道我做错了什么。我已经尝试过使用分组、前瞻/后视和转义字符来使“or”子句正常工作,但我无法得到我想要的结果。据我了解 sed 默认情况下使用基本的正则表达式,但我似乎无法使用
-E
或 -r
找到解决方案...
这对我有用:
$ sed 's/[^:]*[^$:]/REDACTED/' file
REDACTED:1234:aad3b435b:abcdef:::
REDACTED$:4321:aad3b435b:abcdef:::
REDACTED:5678:eaad3b4:fedcba:::
REDACTED:5678:eaad3b4:fedcba:::