2

我有以下输出:

Profile: id=standard,ou=groups,ou=access,ou=data,o=abc,c=au
Password: 3412783561b897b8979878c9789798d89789789
 d49a5e3b8ff353844454
id: account 1 0

我希望将Password字段替换为Password: *******

我怎样才能sed为我做到这一点?我可以替换第一个字符串,但是以下字符串仍然存在:

sed 's/Password: .*/Password: ********/g'
4

4 回答 4

2

使用awk(有点冗长但更通用,并且会屏蔽分布在多行中的密码。)

awk 'f&&/:/{print $0;f=0;next}f&&!/:/{gsub(/[^ ]/,"*",$0)}/Password:/{gsub(/./,"*",$2);f=1}1' file

测试:

JS웃$ cat file
Profile: id=standard,ou=groups,ou=access,ou=data,o=abc,c=au
Password: 3412783561b897b8979878c9789798d89789789
 d49a5e3b8ff353844454
 fadfadf
 agww2342342
id: account 1 0

JS웃$ awk 'f&&/:/{print $0;f=0;next}f&&!/:/{gsub(/[^ ]/,"*",$0)}/Password:/{gsub(/./,"*",$2);f=1}1' file
Profile: id=standard,ou=groups,ou=access,ou=data,o=abc,c=au
Password: ***************************************
 ********************
 *******
 ***********
id: account 1 0

更新:

awk 'f&&/:/{print $0;f=0;next}f&&!/:/{next}/Password:/{gsub(/.*/,"*********",$2);f=1}1' file

测试:

[JS웃:~/Temp]$ awk 'f&&/:/{print $0;f=0;next}f&&!/:/{next}/Password:/{gsub(/.*/,"*********",$2);f=1}1' file
Profile: id=standard,ou=groups,ou=access,ou=data,o=abc,c=au
Password: *********
id: account 1 0
于 2013-06-20T03:20:17.873 回答
2
sed -e '/^Password:/,/^[^ ]/{s/Password: .*/Password: */; /^ /d;}'

这将查找以Password:非空白开头的一行和以非空白开头的下一行之间的行,并将大括号之间的命令应用于这些行。对于该Password:行,它将输入替换Password: *为问题似乎要求的;如果你愿意,你可以做更复杂的替换。另一个命令删除以空格开头的行——密码的续行。范围结束线保持不变。

$ sed -e '/^Password:/,/^[^ ]/{s/Password: .*/Password: */; /^ /d;}' <<'EOF'
> Profile: id=standard,ou=groups,ou=access,ou=data,o=abc,c=au
> Password: 3412783561b897b8979878c9789798d89789789
>  d49a5e3b8ff353844454
> id: account 1 0
> EOF
Profile: id=standard,ou=groups,ou=access,ou=data,o=abc,c=au
Password: *
id: account 1 0
$

我相信这是与 Solaris 合作的一个不错的机会sed。如果它不起作用,请将操作拆分为多行:

sed -e '/^Password:/,/^[^ ]/{
        s/Password: .*/Password: */
        /^ /d
        }' ...

那肯定行得通。

于 2013-06-20T04:59:42.743 回答
2

GNU sed 的代码,假设您的字符串中没有换行符,并且每个 pwd 字符都有一个星号:


$猫文件
个人资料:id=standard,ou=groups,ou=access,ou=data,o=abc,c=au 密码:3412783561b897b8979878c9789798d89789789d49a5e3b8ff353844454 id:帐号 1 0
$sed -r 's/\b[0-9_a-f]\B/*/5;:k;s/\*\w/**/;tk' 文件
个人资料:id=standard,ou=groups,ou=access,ou=data,o=abc,c=au 密码:**************************** ************************************ id: 帐号 1 0

默认情况下,这可能不适用于 solaris11 系统。

于 2013-06-20T06:15:23.260 回答
1

这不起作用吗?

sed 's/^\(Password: \).*/\1*/g' your_file

测试如下:

> cat temp
Profile: id=standard,ou=groups,ou=access,ou=data,o=abc,c=au
Password: 3412783561b897b8979878c9789798d89789789
 d49a5e3b8ff353844454
id: account 1 0
>
> sed 's/^\(Password: \).*/\1*/g' temp
Profile: id=standard,ou=groups,ou=access,ou=data,o=abc,c=au
Password: *
 d49a5e3b8ff353844454
id: account 1 0
> 
于 2013-06-20T05:08:44.863 回答