Найти слова, начинающиеся с буквы, введенной пользователем, в указанном файле - bash

Найти слова, начинающиеся с буквы, введенной пользователем, в указанном файле - bash

Я хочу создать скрипт bash, который найдет все слова, начинающиеся с введенной пользователем буквы в указанном файле (указанном в скрипте или создав пользовательский ввод для него тоже). Я немного больше, чем полный новичок в Linux, мой код:

    #! /bin/bash

echo 'Please enter starting letter of Name'
read name
result=$(awk '/$name/ {print}' /home/beka/scripts/names.txt)
echo "$(result)"

это приводит к ошибке типа:

    Please enter starting letter of Name
G
/home/beka/scripts/test.sh: line 6: result: command not found

что я делаю не так? Я пытался искать примеры awk, но не могу найти точного решения. Спасибо заранее.


ОТРЕДАКТИРОВАННЫЙ КОД

#! /bin/bash

echo 'Please enter starting letter of Name'
read name

if [[ $name == [A-Z] ]]
then 
awk "/$name/{print}" /home/beka/scripts/names.txt
else
echo '0'
fi

EDIT names.txt — это список имен

Michael
Christopher
Jessica
Matthew
Ashley
Jennifer
Joshua

ДРУГОЕ ИЗМЕНЕНИЕ

#! /bin/bash

echo 'Please enter starting letter (Uppercase) of name'
read name

if [[ $name == [A-Z] ]]
then 
echo "---Names starting with $name---"
awk "/$name/{print}" /home/beka/scripts/names.txt
elif [[ $name == [a-z] ]]
then
awk "/$name/{print}" /home/beka/scripts/names.txt
else
echo '---------'
echo 'Names not found'
fi

решение1

echo "$(result)"пытается выполнить команду, названную resultлюбезно частью $(result), отсюда и сообщение об ошибке result: command not found.

Попробуйте это (не проверено):

#!/usr/bin/env bash

result=''
while [[ -z "$result" ]]; do
    echo 'Please enter starting letter of Name'
    read name

    if [[ $name == [A-Z] ]]
    then 
        result=$(awk -v name="$name" 'index($0,name)==1' /home/beka/scripts/names.txt)
    else
        echo '0'
    fi
done
echo "$result"

Чтобы сделать поиск нечувствительным к регистру:

awk -v name="$name" 'index(tolower($0),tolower(name))==1' /home/beka/scripts/names.txt

Очевидно, вам также придется изменить $name == [A-Z]на $name == [a-zA-Z]или $name == [[:alpha:]], если вы хотите иметь возможность принимать строчные буквы в качестве символа поиска.

Связанный контент