venerdì, settembre 16, 2011

 
Qui una libreria bash per accedere ai file ini formato windows.

_iniread()
{
file=$1
sezione=$2
chiave=$3
awk -F= "
function ltrim(s) {
sub(/^ */, \"\", s);
return s
}

function rtrim(s) {
sub(/ *$/, \"\", s);
return s
}

function trim(s) {
return rtrim(ltrim(s));
}
BEGIN { insection=0 }

/\[/ {
insection=0;
}

/^[^;]/ {
if (insection) {
key=trim(\$1);
if (key == \"$chiave\") {
gsub(\"\\r\",\"\");
printf(\"%s\\n\",trim(\$2));
}
}
}
/\[$sezione\]/ {
insection=1;
}
" $file
}

_iniwrite()
{
file=$1
sezione=$2
chiave=$3
valore=$4
ftemp=`mktemp /tmp/iniwr.XXXXXX`
chmod a+rwx $ftemp
awk -F= "
function ltrim(s) {
sub(/^ */, \"\", s);
return s
}

function rtrim(s) {
sub(/ *$/, \"\", s);
return s
}

function trim(s) {
return rtrim(ltrim(s));
}
BEGIN { insection=0;scritto=0; }
END {
if (!scritto) {
printf(\"[%s]\\r\\n\",trim(\"$sezione\"));
printf(\"%s=%s\\r\\n\\r\\n\",trim(\"$chiave\"),trim(\"$valore\"));
}
}

/\[/ {
if (insection && !scritto) {
printf(\"%s=%s\\r\\n\\r\\n\",trim(\"$chiave\"),trim(\"$valore\"));
scritto=1;
}
insection=0;
}
/\[$sezione\]/ {
insection=1;
}

{
gsub(\"\\r\",\"\");
if (insection) {
if (trim(\$1) == trim(\"$chiave\")) {
printf(\"%s=%s\\r\\n\",trim(\$1),trim(\"$valore\"));
scritto=1;
} else
printf(\"%s\\r\\n\",\$0);
} else
printf(\"%s\\r\\n\",\$0);
}
" $file > $ftemp
err=$?
[ $err -ne 0 ] && echo "Errore nella iniwrite $file"
[ $err -eq 0 ] && mv $ftemp $file
}

_inidelete()
{
file=$1
sezione=$2
chiave=$3
ftemp=`mktemp /tmp/iniwr.XXXXXX`
chmod a+rwx $ftemp
awk -F= "
function ltrim(s) {
sub(/^ */, \"\", s);
return s
}

function rtrim(s) {
sub(/ *$/, \"\", s);
return s
}

function trim(s) {
return rtrim(ltrim(s));
}
BEGIN { insection=0 }

/\[/ {
insection=0;
}
/\[$sezione\]/i {
insection=1;
}

{
gsub(\"\\r\",\"\");
if (insection) {
if (trim(\$1) != trim(\"$chiave\"))
printf(\"%s\\r\\n\",\$0);
} else
printf(\"%s\\r\\n\",\$0);
}
" $file > $ftemp
err=$?
[ $err -ne 0 ] && echo "Errore nella iniwrite $file"
[ $err -eq 0 ] && mv $ftemp $file
}

This page is powered by Blogger. Isn't yours?

Iscriviti a Post [Atom]