我有一组想要匿名化的哈希。使用 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之间的任何内容:
。
我不知道我做错了什么。我试过多次,试图使用分组、前瞻/后瞻和转义字符来让“或”子句正常工作,但我无法得到我想要的结果。据我所知,sed 默认使用基本正则表达式,但我似乎无法找到使用-E
或-r
解决方案...
这对我有用:
Perl:
或者,按照建议,先行展望:
或者,awk:
任何打印内容: