0

所以我正在开发一个简单的地址簿并且进展顺利。它使用单个文本文件来存储其所有信息。

此刻我可以在文件中搜索特定字符串,这不是问题。

我很确定我可以让它根据用户输入删除一个字符串,这很容易,但我认为为了更加时髦,如果我能抓住搜索词的输出 - 多行,那将是一个好主意输出说 - 并将每个新行存储到一个数组中,每个数组分配一个数字。从那里,用户可以指定他们想根据他们的输入删除该行。

到目前为止,这是“删除”脚本:

ADDRESSBOOK=~/Documents/Address-Book/add_data.txt

export ADDRESSBOOK

echo "=============================== Delete a Record ==============================="
echo "==============================================================================="
echo "============ Search A Record, then delete it! Type 'exit' to exit ============="

exit=0
search(){
    while [ $exit -ne 1 ]
    do

        echo "Find something for me to delete"
        echo -n "-----------------------> "

        read searchTerm
        if [ "$searchTerm" = "exit" ]
        then
            exit=1
        else

            searchOutput=$(grep $searchTerm*.$ $ADDRESSBOOK | sort)

            echo "$searchOutput"
        fi
    done

    exit 0
}

search

地址簿会自动使用 /n 添加每条记录,因此无论如何它都会在新行上显示每条记录。

是否可以获取 $searchRecord 变量并将其传递给数组?

在我开始思考数组之前,这甚至是我想要做的最好的方法吗?

我目前正在尝试类似的东西

if [ "$searchTerm" = "exit" ]
then 
    exit=1
else

    searchOutput=$(grep $searchTerm*.$ $ADDRESSBOOK | sort)
    echo {$searchOutput[*] '/n' }

fi

'/n' 是为了尝试并让每个记录出现在新行上。有什么建议吗?

4

2 回答 2

0

尝试类似:

l=$(grep $searchTerm $ADDRESSBOOK | \
    sort | { \
        n=0; \
        while read a; \
            do echo "searchOutput[$n]=\"$a\";" ; \
                n=$((n + 1)) ; \
            done; \
    })
eval $l

for line in "${searchOutput[@]}"
do
    echo $line
done
于 2013-04-13T19:33:26.483 回答
0
    while  read -p 'Find something for me to delete> ' searchTerm
  [[ $searchTerm != 'exit' ]]   do readarray -t searchOutput < <(grep -i -w "$searchTerm" "$ADDRESSBOOK" | sort)



        if ((${#searchOutput[@]}>0)); then

        PS3="Select line to delete: "

            select line in "${searchOutput[@]}"; do

            [[ -z $line ]] && break

            line=$(fgrep -nx "$line" "$ADDRESSBOOK")



        sed -i ${line%%:*}d "$ADDRESSBOOK"

                echo "Deleting line" $line
            done
        elif [ $searchTerm = "exit" ]
        then 
        exit=1
            else
                echo "------------- Could Not Find > " $searchTerm
        exit=1
                fi
done
exit 0
}
于 2013-04-29T18:23:48.357 回答