지정된 파일에서 사용자가 입력 한 문자로 시작하는 모든 단어를 찾는 bash 스크립트를 만들고 싶습니다 (스크립트에 지정되거나 사용자 입력도 생성). 나는 리눅스 초보자보다 조금 더 많은데, 내 코드는 다음과 같다.
#! /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
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:]]
합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다