지정된 파일에서 사용자가 입력한 문자로 시작하는 단어 찾기 - 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:]]

관련 정보