지정된 파일에서 사용자가 입력한 문자로 시작하는 단어 찾기 - 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 name.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)"resultCourt of the part 라는 명령을 실행하려고 시도하고 있으므로 $(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:]]

관련 정보