In this HackerRank Filter an Array with Patterns problem solution We now transition to some basic examples of bash scripting for the purpose of text processing and data munging. In this challenge, we practice reading and filtering an array.

Task

You are given a list of countries, each on a new line. Your task is to read them into an array and then filter out (remove) all the names containing the letter 'a' or 'A'.

Input Format

The input format consists of a list of country names, each on a separate line. The only characters present in the country names will be upper or lower-case characters and hyphens.

Output Format

From the given list, remove the names that contain 'a' or 'A' in them. If there are no names left after removing these characters, you should display a blank line.

hackerrank filter an array with patterns problem solution

Problem solution.

readarray -t country
echo "${country[@]/*[aA]*/}"|sed 's/^\s*//g'


Second solution.

while read n
do
a=("${a[@]}" "$n")
done
temp=( ${a[@]/*a*/} )
echo ${temp[@]/*A*/}


Third solution.

array=()
while read line; do
    array=(${array[@]} $line)
done
filtered=(${array[@]/*a*/})
echo ${filtered[@]}


Fourth solution.

iter=0
while [ 1 ]
do 
read line
if [ -n "$line" ]; then array[$((iter++))]="$line"
else break
fi 
done

for item in ${array[@]}
do
    if [ "$item" = "$(echo $item | grep -wE "[^aA]*")" ]; 
    then echo -n "$item " 
    fi
done