尋找以使用者在指定檔案中輸入的字母開頭的單字 - 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

編輯名稱.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]or 。$name == [[:alpha:]]

相關內容