使用bash编辑文本文件和显示输出

问题描述:

我有一个文本文件,课程,看起来像这样:使用bash编辑文本文件和显示输出

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比较前卫”保存“4”学分 保存所有左侧的第二空间,当然行因为课程号码 保存所有课程行中第二个空格的权利,因为课程名称 然后显示我想要的输出。

应该打印csc4567,计算机程序设计,4

是的,这是家庭作业,但由于我是新来的论坛,它不会让我标记后如此。

+0

因此,在该例(csc 4567)的情况下应该打印什么? – Beta 2013-03-28 03:38:41

+0

你对bash语法缺乏一些基本的了解。就像你必须使用'var = $(command)'或'var = \'command''把一个命令的输出放入一个变量中,而不是'var = command'。顺便说一句,即使是老用户也不能使用作业标签,因此已弃用。 – Barmar 2013-03-28 03:44:40

+0

你可以使用像sed这样的工具吗?或者它必须是纯粹的bash吗? – Beta 2013-03-28 04:08:37

#/bin/bash 
while read line 
do 
if [[ $line =~ ^(csc\ [0-9]+)\ \-(.*)+ ]]; then 
     a="$a${BASH_REMATCH[1]},${BASH_REMATCH[2]}" 
elif [[ $line =~ ^([0-9]+)([0-9\.\,])+\ credit ]]; then 
    a="$a,${BASH_REMATCH[1]}\n" 
#else 
    # a="$a,$line" 
fi 

done < "a1.txt" 
echo -e $a