Here is a Perl script to achieve your goal:
#!/usr/bin/perl
use warnings;
use strict;
while (<DATA>) {
chomp;
my @fields = split /\|~\|/;
if ($fields[2] =~ /password/) {
$fields[0] = "# $fields[0]";
$fields[3] = '';
}
print join("|~|", @fields), "\n";
}
__DATA__
database2|~|t1||~|${topuser.username}|~|topuser
database2|~|t1||~|${topuser.password}|~|H4rdt0Gu3ss
database2|~|t1||~|${loguser.username}|~|LOG
database2|~|t1||~|${loguser.password}|~|Ih4v3n01d34y0utry
# database2|~|t1||~|${open.var1}|~|connect
# database2|~|t1||~|${tablespace}|~|gis_tbs1
Here is the one-liner version:
perl -F'/\|~\|/' -ane '$"="|~|"; if ($F[2] =~ /password/) { $F[0]="# $F[0]"; $F[3] = "\n"; } print "@F";' datafile