Se un progetto contiene un solo utente, desidero che questo non venga cancellato.

Per il resto attendo




l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ cat esempio.txt
[progetto 1:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw
[progetto 2:/]
utente 2 = rw
[progetto 3:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw
[progetto 4:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw
sed -ne '/match1/,/match2/p' path_del_filel3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ sed -ne '/\[progetto 3/,/^[[:space:]]*$/p' esempio.txt
[progetto 3:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ sed -ne '/\[progetto 3/,/^[[:space:]]*$/p' esempio.txt | wc -l
5BEGIN {
while ((getline tmp) != 0)
if (tmp != "["progetto":/]") {
print tmp
}
else
break
print tmp
while ((getline tmp) != 0)
if (tmp !~ utente)
print tmp
else if (tmp !~ /\[*/) {
break
}
}
{
print
}
#! /bin/bash
project=$1
user=$2
fileName=$3
rows=`sed -ne "/\[$project/,/^[[:space:]]*$/p" esempio.txt | wc -l`
if [ $rows == 3 ]; then
echo $project ha solo un utente
else
awk -v progetto="$project" -v utente="$user" -f rimuovi.awk $fileName
fi
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ ./inserisciRimuoviUtente.sh "progetto 2" "utente 2" esempio.txt
progetto 2 ha solo un utente
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ ./inserisciRimuoviUtente.sh "progetto 2" "utente 3" esempio.txt
progetto 2 ha solo un utente
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ ./inserisciRimuoviUtente.sh "progetto 3" "utente 3" esempio.txt
[progetto 1:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw
[progetto 2:/]
utente 2 = rw
[progetto 3:/]
utente 1 = rw
utente 2 = rw
[progetto 4:/]
utente 1 = rw
utente 2 = rw
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ ./inserisciRimuoviUtente.sh "progetto 3" "utente 1234" esempio.txt
[progetto 1:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw
[progetto 2:/]
utente 2 = rw
[progetto 3:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw
[progetto 4:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw


ma comunque sia utenti che progetti non hanno spazi nel nome

Per il momento mi pare un ottimo script

logicamente farò in modo che ci sia una riga vuota anche dopo l'ultimo progetto



mikecesure ha scritto:no, nessun ordine alfabetico!! E logicamente bisogna verificare che non siano già presenti per quel progetto...
sed -ne '/\[progetto 3/,/^[[:space:]]*$/p' esempio.txt | wc -l


casomai ti rispondo giovedì!!



l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ sed -e '/\[progetto 3/,/^[[:space:]]*$/s/utente 2.*//' esempio.txt
[progetto 1:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw
[progetto 2:/]
utente 2 = rw
[progetto 3:/]
utente 1 = rw
utente 3 = rw
[progetto 4:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw


if [ `sed -ne "/\[$progetto/,/^[[:space:]]*$/p" esempio.txt | wc -l` -gt 3 ]; then
sed "/\[$progetto/,/^[[:space:]]*$/{/^$utente.*$/d;}" esempio.txt
else
echo $progetto ha solo un utente
fil3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ progetto="progetto 3"
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ utente="utente 2"
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ if [ `sed -ne "/\[$progetto/,/^[[:space:]]*$/p" esempio.txt | wc -l` -gt 3 ]; then sed "/\[$progetto/,/^[[:space:]]*$/{/^$utente.*$/d;}" esempio.txt;else echo $progetto ha solo un utente; fi
[progetto 1:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw
[progetto 2:/]
utente 2 = rw
[progetto 3:/]
utente 1 = rw
utente 3 = rw
[progetto 4:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ progetto="progetto 2"
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ utente="utente 2"
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ if [ `sed -ne "/\[$progetto/,/^[[:space:]]*$/p" esempio.txt | wc -l` -gt 3 ]; then sed "/\[$progetto/,/^[[:space:]]*$/{/^$utente.*$/d;}" esempio.txt;else echo $progetto ha solo un utente; fi
progetto 2 ha solo un utente
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$



patel ha scritto:si trovano in rete esempi di sed ampiamente commentati nei dettagli ?
) e poi ti posto le documentazioni che di norma controllo io 

l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ cat esempio.txt
[progetto 1:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw
[progetto 2:/]
utente 2 = rw
[progetto 3:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw
[progetto 4:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ ./inserisciRimuoviUtente.sh "progetto pippiCalzeLunghe" insert "utente 3" esempio.txt
Il progetto progetto pippiCalzeLunghe non è presente
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ ./inserisciRimuoviUtente.sh "progetto 3" remove "utente pippiCalzelunghe" esempio.txt
Rimuovo utente pippiCalzelunghe da progetto 3
L'utente utente pippiCalzelunghe non è nel progetto progetto 3
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ ./inserisciRimuoviUtente.sh "progetto 2" remove "utente pippiCalzelunghe" esempio.txt
Rimuovo utente pippiCalzelunghe da progetto 2
Il progetto progetto 2 ha solo un utente
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ ./inserisciRimuoviUtente.sh "progetto 2" insert "utente 2" esempio.txt
Inserisco l'utente utente 2 nel progetto 2
L'utente utente 2 è già nel progetto progetto 2
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ ./inserisciRimuoviUtente.sh "progetto 3" pippiCalzelunghe "utente 1" esempio.txt
L'operazione pippiCalzelunghe non è supprotata
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ ./inserisciRimuoviUtente.sh "progetto 2" insert "utente pippiCalzeLunghe" esempio.txt
Inserisco l'utente utente pippiCalzeLunghe nel progetto progetto 2
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ cat esempio.txt
[progetto 1:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw
[progetto 2:/]
utente pippiCalzeLunghe = rw
utente 2 = rw
[progetto 3:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw
[progetto 4:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ ./inserisciRimuoviUtente.sh "progetto 3" remove "utente 1" esempio.txt
Rimuovo l'utente utente 1 dal progetto progetto 3
l3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ cat esempio.txt
[progetto 1:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw
[progetto 2:/]
utente pippiCalzeLunghe = rw
utente 2 = rw
[progetto 3:/]
utente 2 = rw
utente 3 = rw
[progetto 4:/]
utente 1 = rw
utente 2 = rw
utente 3 = rw
#! /bin/bash
project=$1
action=$2
user=$3
fileName=$4
projectRow=`grep -no "$project" "$fileName" | cut -d ':' -f 1`
if [ -z $projectRow ]; then
echo Il progetto "$project" non è presente
exit 2
else
case $action in
remove)
echo Rimuovo l\'utente "$user" dal progetto "$project"
if [ `sed -ne "$projectRow,/^[[:space:]]*$/p" "$fileName" | wc -l` -gt 3 ]; then
if ! sed -ne "$projectRow,/^[[:space:]]*$/p" "$fileName" | grep "$user" > /dev/null; then
echo L\'utente "$user" non è nel progetto "$project"
exit 2
else
sed -i "$projectRow,/^[[:space:]]*$/{/^$user.*$/d;}" "$fileName"
fi
else
echo Il progetto "$project" ha solo un utente
exit 2
fi
;;
insert)
echo Inserisco l\'utente "$user" nel progetto "$project"
if sed -ne "$projectRow,/^[[:space:]]*$/p" "$fileName" | grep "$user" > /dev/null; then
echo L\'utente "$user" è già nel progetto "$project"
exit 2
else
let "projectRow++"
string="$user = rw"
sed -i "$projectRow i $string" "$fileName"
fi
;;
*)
echo L\'operazione "$action" non è supprotata
exit 2
;;
esac
fi
project=$1
action=$2
user=$3
fileName=$4

time ./nomeScript.sh et compagnia bellal3on4rdo@l3on4rdo-laptop:~/Scrivania/forum/controllaUtenteProgetto$ time ./inserisciRimuoviUtente.sh "progetto 2" insert "utente misoginiaPortamiVia" esempio.txt
Inserisco l'utente utente misoginiaPortamiVia nel progetto 2
real 0m0.020s
user 0m0.070s
sys 0m0.000s
si trovano in rete esempi di sed ampiamente commentati nei dettagli ?


if [ `sed -ne "$projectRow,/^[[:space:]]*$/p" "$fileName" | wc -l` -gt 3 ]; then
if ! sed -ne "$projectRow,/^[[:space:]]*$/p" "$fileName" | grep "$user" > /dev/null; then
, mi sa che mi metterò a studiare sed, appena ho un po' di tempo 

quasi mi commuovo 

projectRow=`grep -no "$project" "$fileName" | cut -d ':' -f 1`
sed -i "$projectRow,/^[[:space:]]*$/{/^.*$/d;}" "$fileName"users=$(sed -ne "$projectRow,/^[[:space:]]*$/p" "$fileName")
for user in $users; do
codice di verifica
done;
mi spieghi per favore la sintassi di queste 2 linee ?
sed -ne "$projectRow,/^[[:space:]]*$/p" -n, --quiet, --silent
suppress automatic printing of pattern space"$projectRow,/^[[:space:]]*$/p"0,/regexp/
A line number of 0 can be used in an address specification like 0,/regexp/ so that sed will try to match regexp in the first input line too. In other words, 0,/regexp/ is similar to 1,/regexp/, except that if addr2 matches the very first line of input the 0,/regexp/ form will consider it to end the range, whereas the 1,/regexp/ form will match the beginning of its range and hence make the range span up to the second occurrence of the regular expression.
Note that this is the only place where the 0 address makes sense; there is no 0-th line and commands which are given the 0 address in any other way will give an error.
wc -l if ! sed -ne "$projectRow,/^[[:space:]]*$/p" "$fileName" | grep "$user" > /dev/null; thenif ! comando
