使用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
是的,这是家庭作业,但由于我是新来的论坛,它不会让我标记后如此。
答
#/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
因此,在该例(csc 4567)的情况下应该打印什么? – Beta 2013-03-28 03:38:41
你对bash语法缺乏一些基本的了解。就像你必须使用'var = $(command)'或'var = \'command''把一个命令的输出放入一个变量中,而不是'var = command'。顺便说一句,即使是老用户也不能使用作业标签,因此已弃用。 – Barmar 2013-03-28 03:44:40
你可以使用像sed这样的工具吗?或者它必须是纯粹的bash吗? – Beta 2013-03-28 04:08:37