Wörter suchen, die mit dem vom Benutzer in der angegebenen Datei eingegebenen Buchstaben beginnen - bash

Wörter suchen, die mit dem vom Benutzer in der angegebenen Datei eingegebenen Buchstaben beginnen - bash

Ich möchte ein Bash-Skript erstellen, das alle Wörter findet, die mit dem vom Benutzer eingegebenen Buchstaben in einer angegebenen Datei beginnen (im Skript angegeben oder auch durch Erstellen einer Benutzereingabe dafür). Ich bin ein bisschen mehr als ein absoluter Anfänger in Linux, mein Code lautet:

    #! /bin/bash

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

Dies führt zu einem Fehler wie:

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

was mache ich falsch? Ich habe versucht, nach Awk-Beispielen zu suchen, kann aber keine genaue Lösung finden. Vielen Dank im Voraus.


BEARBEITETER CODE

#! /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 ist eine Liste von Namen

Michael
Christopher
Jessica
Matthew
Ashley
Jennifer
Joshua

EINE WEITERE BEARBEITUNG

#! /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

Antwort1

echo "$(result)"versucht, einen Befehl mit dem Namen „ resultMit freundlicher Genehmigung des $(result)Teils“ auszuführen, daher die Fehlermeldung result: command not found.

Versuchen Sie Folgendes (ungetestet):

#!/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"

So machen Sie die Suche unabhängig von Groß- und Kleinschreibung:

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

Natürlich müssen Sie auch $name == [A-Z]auf $name == [a-zA-Z]oder umstellen $name == [[:alpha:]], wenn Sie Kleinbuchstaben als Suchzeichen akzeptieren möchten.

verwandte Informationen