Come eseguire un'iterazione attraverso una serie di stringhe e rimuovere parti dei loro valori? (BASH)
Ho una matrice popolata con un elenco di sitisalvato come stringhe, e voglio prendere le sezioni che si trovano a sinistra di ".com.au" e salvarle in un nuovo array. Ci sono anche un paio di elementi nella stringa che non finiscono con ".com.au" e voglio ignorarli completamente.
Per renderlo un po 'più facile da leggere, ho rimosso la maggior parte del codice e l'ho lasciato solo in quello che penso sarà pertinente alla domanda:
#!/bin/bash
full_array(*); declare -p full_array
edited_array=()
for x in ${full_array[@]};
#If x ends with ".com.au"
#Remove ".com.au" from x
#Save output to edited_array
#Else
#Skip item
done
Dovrò usare regex per fare questo? Se sì, qualcuno sa di qualche buon tutorial online che varrebbe la pena di dare un'occhiata?
risposte:
2 per risposta № 1Questo dovrebbe funzionare:
for x in ${full_array[@]};do
[[ $x == *.com.au ]] && edited_array+=("${x%.com.au}")
done
1 per risposta № 2
if [[ $x == *.com.au ]]; then
edited_array+=( "${x%.com.au}" )
fi
All'interno di doppie parentesi bash, il ==
l'operatore è un operatore di corrispondenza del modello. Quindi, basta usare l'espansione dei parametri della shell per rimuovere il dominio e aggiungere all'array +=