【发布时间】:2013-03-28 03:33:22
【问题描述】:
我有一个包含如下课程的文本文件:
csc 4567 - Computer Programming
This course is about stuff...blah blah blah
4.0000 credit hours
我需要编写一个 bash 脚本来获取文本文件并提取必要的信息来显示课程编号、课程名称、课程学分。没有空格,只有逗号。课程学分作为整数。
我可以使用命令行提取信息,但是在编写 bash 脚本时我迷路了。我猜我应该将 grep 和 sed 与 bash 一起使用?我不知道。这就是我所拥有的(这显然不是正确的)。任何建议将不胜感激。
while read courses.txt
do
$courseLine=grep -iE '^csc [0-9]{4}'
$creditHours=grep -iE '^[0-4]'
$courseNumber=${courseLine#/s/s*}
$courseName=${courseLine%/s/s*}
printf "$courseNumber,$courseName,$creditHours"
done
我想要完成的是:读取文件行 将“csc 4567 - Comp prog”保存为课程行 保存“4”作为学分 将课程行中第二个空格剩下的所有内容保存为课程编号 将课程行中第二个空格的所有内容保存为课程名称 然后显示我想要的输出。
应该打印 csc4567,Computer Programming,4
是的,这是作业,但由于我是论坛的新手,所以我不会给帖子贴上这样的标签。
【问题讨论】:
-
那么在这个例子中(csc 4567)应该打印什么?
-
您对 bash 语法缺乏一些基本的了解。就像您必须使用
var=$(command)或var=`command`将命令的输出放入变量中,而不是var=command。顺便说一句,即使是老用户也不能使用 homework 标签,它已被弃用。 -
你能用
sed这样的工具吗,还是必须是纯bash? -
是的,我必须使用 bash。
-
我把我的脚本改成了这样:
while read line;do courseLine='$line|grep -iE ^csc [0-9]{4}' creditHours='$line|grep -iE '^[0-4]'' courseNumber=${courseLine#/s*} courseName=${courseLine%/s*} echo $courseNumber,$courseName,$courseHours done <courses.txt我不确定这是否是进步...?
标签: linux bash shell unix scripting