/ / Iterando attraverso una serie di stringhe e rimuovendo parti dei loro valori in Bash? - Array, regex, string, bash

Iterare attraverso una serie di stringhe e rimuovere parti dei loro valori in Bash? - array, regex, string, bash

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 № 1

Questo 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 +=