当前位置: 技术问答>linux和unix
初学shell编程_通讯录程序_grep函数与sed函数
来源: 互联网 发布时间:2016-11-22
本文导语: 本人初学shell编程(bash),要写一个电话本的小程序(实现姓名、电话号码、地址这些记录的添加、查找、删除等功能)。遇到了一些问题,主要就是grep函数和sed函数的使用请大侠指教。 比如在a.txt的文件中有如下...
本人初学shell编程(bash),要写一个电话本的小程序(实现姓名、电话号码、地址这些记录的添加、查找、删除等功能)。遇到了一些问题,主要就是grep函数和sed函数的使用请大侠指教。
比如在a.txt的文件中有如下记录:
aaa 12897654567 beijing
aa 15098765432 nanjing
john 87654321d
csdn上和别的网上也有类似的代码(http://topic.csdn.net/u/20100814/00/FB26CB40-7096-4C46-87C8-A247F58AB735.html),但都存在跟我一样的问题:
1.查找。比如查找关键字为 "aa",那么查找结果会把aa 与aaa 这两个记录都列出来。
我的查找代码如下。请问该怎样改呢?
function search
{
echo "
请输入要查询的姓名(或电话号码、地址):"
read searchname
UserName=`grep "$searchname>" a.txt` if [ "$UserName" = "" ]
then
echo "
没有要查询的记录 "
else
echo "$UserName"
fi
}
2.删除时也遇到了类似的问题。
代码如下:
function delete
{
echo "
请输入要删除的记录的姓名(或者 地址 电话号码都行)"
read delete
result=`grep $delete data_hyb`
if [ "$result" = "" ];
then
echo "没有找到要删除的记录"
else
sed "/$delete/d" data_hyb>mytemp
mv mytemp a.txt
echo "删除记录成功"
fi
}
3.如果想要对记录按照手机号排序,该怎么做呢?我才看了半天的shell,纯新手,请说详细一点。
4.话虽多,但都是很基础的问题。麻烦大家了。如果回答得好还有加分。
比如在a.txt的文件中有如下记录:
aaa 12897654567 beijing
aa 15098765432 nanjing
john 87654321d
csdn上和别的网上也有类似的代码(http://topic.csdn.net/u/20100814/00/FB26CB40-7096-4C46-87C8-A247F58AB735.html),但都存在跟我一样的问题:
1.查找。比如查找关键字为 "aa",那么查找结果会把aa 与aaa 这两个记录都列出来。
我的查找代码如下。请问该怎样改呢?
function search
{
echo "
请输入要查询的姓名(或电话号码、地址):"
read searchname
UserName=`grep "$searchname>" a.txt` if [ "$UserName" = "" ]
then
echo "
没有要查询的记录 "
else
echo "$UserName"
fi
}
2.删除时也遇到了类似的问题。
代码如下:
function delete
{
echo "
请输入要删除的记录的姓名(或者 地址 电话号码都行)"
read delete
result=`grep $delete data_hyb`
if [ "$result" = "" ];
then
echo "没有找到要删除的记录"
else
sed "/$delete/d" data_hyb>mytemp
mv mytemp a.txt
echo "删除记录成功"
fi
}
3.如果想要对记录按照手机号排序,该怎么做呢?我才看了半天的shell,纯新手,请说详细一点。
4.话虽多,但都是很基础的问题。麻烦大家了。如果回答得好还有加分。
|
1.UserName=`grep "$searchname>" a.txt`
-------------------------------------------
UserName=`awk '{if($1 ~ /^'"$username"'$/) print $1}' a.txt`
如果你看不清里边的引号情况(单双$username双淡) 你直接复制
2.sed "/$delete/d" data_hyb>mytemp
------------------------
sed "/^$delete /d" data_hyb>mytemp
其实你可以直接修改data_hyb 不用用mytemp也行 加-i参数直接在源文件里修改
sed -i "/^$delete /d" data_hyb
3.如果想要对记录按照手机号排序,该怎么做呢?我才看了半天的shell,纯新手,请说详细一点。
--------------
先去研究一下sort
-------------------------------------------
UserName=`awk '{if($1 ~ /^'"$username"'$/) print $1}' a.txt`
如果你看不清里边的引号情况(单双$username双淡) 你直接复制
2.sed "/$delete/d" data_hyb>mytemp
------------------------
sed "/^$delete /d" data_hyb>mytemp
其实你可以直接修改data_hyb 不用用mytemp也行 加-i参数直接在源文件里修改
sed -i "/^$delete /d" data_hyb
3.如果想要对记录按照手机号排序,该怎么做呢?我才看了半天的shell,纯新手,请说详细一点。
--------------
先去研究一下sort