On 3/12/24 18:04, Giuseppe Sacco wrote:
Ciao Piviul,
Il giorno mar, 12/03/2024 alle 10.18 +0100, Piviul ha scritto:
Ciao a tutti, ho uno script che interroga (ldapsearch) alcuni campi di
un db ldap e aggiunge alcuni altri ammenicoli che poi importa in un
altro db sempre ldap.
[...]
-e "s/displayName:\ \(.*\)$/displayName: \1\nsn: \1\nou:
utenti\nobjectClass: top\nobjectClass: inetOrgPerson/"> $ldap_ns_path
[...]
Mi pare di capire che sed sostituisca solo le linee che contengono
"displayName:" seguito da uno spazio. Nel tuo caso "displayName:" non è
seguito da uno spazio, ma dal secondo ":", sicché sed non lo prende in
considerazione. Forse dovresti cambiare l'espressione con le regex estese,
così:
sed -E -e "s/displayName(:|::)\ (.*)$/displayName\1 \2/"
Grazie Giuseppe, hai ragione, che pataca! Grazie ancora, ora è proprio
tutto risolto... anzi quasi... per caso in sed, nella sostituzione si
possono inserire comandi... qualcosa tipo
echo "displayName:: Tmljb2zDsiBFZG9hcmRv" | sed -E -e
"s/(displayName:): (.*)$/\1 $(echo "\2" | base64 -i --decode)/"
Purtroppo non funziona, restituisce l'errore "base64: input non valido"
ma non capisco perché; questo però funziona
echo "displayName:: Tmljb2zDsiBFZG9hcmRv" | sed -E -e
"s/(displayName:): (.*)$/\1 $(echo "\2")/"
e restituisce
displayName: Tmljb2zDsiBFZG9hcmRv
Quindi sembra non venga interpretato correttamente il pipe... hai
qualche suggerimento?
Piviul