- 论坛徽章:
- 145
|
回复 1# s1113
$ cat ip001.txt
#a_IPadress ttt
a_IPadress sonsafasdf
b_IPadress 192.168.19.2
c_IPadress 192.168.19.3
a_IPadres sonsafasdf
$ ./set_value_by_key.sh ip001.txt a_IPadress " " 2 xxx; cat ip001.txt
#a_IPadress ttt
a_IPadress xxx
b_IPadress 192.168.19.2
c_IPadress 192.168.19.3
a_IPadres sonsafasdf
$ ./set_value_by_key.sh ip001.txt a_IPadress " " 2 s; cat ip001.txt
#a_IPadress ttt
a_IPadress s
b_IPadress 192.168.19.2
c_IPadress 192.168.19.3
a_IPadres sonsafasdf
$ cat set_value_by_key.sh
if [ $# -ne 5 ]; then
echo "Usage is: $0 filename keystr spliter valueindex valuestr"
echo "Example : $0 ip001.txt a_IPadres \" \" 2 sons"
exit
fi
export filename=$1
export keystr=$2
export spliter=$3
export valueindex=$4
export valuestr=$5
perl -i -lne '
BEGIN{
$" = $ENV{spliter};
}
{
@F = split($ENV{spliter});
if($F[0] =~ m/^$ENV{keystr}$/){
#print "\$F[0]=$F[0],\$F[1]=$F[1]";
#print $ENV{valueindex}-1;
$F[$ENV{valueindex}-1] = $ENV{valuestr};
$matched = 1;
}
print "@F";
}
END{
if(!$matched){
system("echo \"$ENV{keystr}$ENV{spliter}$ENV{valuestr}\" >> $ENV{filename}");
}
}' "$filename"
|
|