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

Linux 使用bash编辑文本文件并显示输出,linux,bash,shell,unix,scripting,Linux,Bash,Shell,Unix,Scripting,我有一个包含课程的文本文件,如下所示: csc 4567-计算机编程 这门课是关于东西的…废话废话 4.0000学时 我需要编写一个bash脚本,获取文本文件并提取必要的信息来显示课程号、课程名称、课程学分。没有空格,只有逗号。课程学分为整数 我可以使用命令行提取信息,但在编写bash脚本时我迷失了方向。我猜我应该在bash中使用grep和sed?我不确定。这就是我所拥有的(这显然是不正确的)。如有任何建议,将不胜感激 阅读courses.txt时 做 $courseLine=grep-iE“

我有一个包含课程的文本文件,如下所示:

csc 4567-计算机编程
这门课是关于东西的…废话废话
4.0000学时
我需要编写一个bash脚本,获取文本文件并提取必要的信息来显示课程号、课程名称、课程学分。没有空格,只有逗号。课程学分为整数

我可以使用命令行提取信息,但在编写bash脚本时我迷失了方向。我猜我应该在bash中使用grep和sed?我不确定。这就是我所拥有的(这显然是不正确的)。如有任何建议,将不胜感激

阅读courses.txt时

做
$courseLine=grep-iE“^csc[0-9]{4}”
$creditHours=grep-iE'^[0-4]'
$courseNumber=${courseLine#/s/s*}
$courseName=${courseLine%/s/s*}
printf“$courseNumber,$courseName,$creditHours”
完成
以上我试图完成的是:读取文件行 将“csc 4567-Comp prog”另存为课程行 将“4”另存为学分 将课程行中剩余的第二个空格保存为课程编号 将课程行第二个空格的所有内容保存为课程名称 然后显示我想要的输出

它应该打印csc4567,计算机编程,4

是的,这是我的家庭作业,但因为我是新加入论坛的,所以不会让我给帖子贴上这样的标签。

\bin/bash
#/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
读行时 做 如果[[$line=~^(csc\[0-9]+)\-(.*)+];然后 a=“$a${BASH_重赛[1]},${BASH_重赛[2]}” elif[[$line=~^([0-9]+)([0-9\.\,])+\credit]];然后 a=“$a,${BASH\u重新匹配[1]}\n” #否则 #a=“$a,$line” fi 完成<“a1.txt” echo-e$a
那么在这个示例(csc 4567)中,它应该打印什么呢?您对bash语法缺乏一些基本的理解。您必须使用
var=$(command)
var=`command`
将命令的输出放入变量,而不是
var=command
。顺便说一句,即使是老用户也不能使用家庭作业标签,它已被弃用。您可以使用像
sed
这样的工具,还是必须使用纯bash?是的,我必须使用bash。我将我的脚本更改为:
同时阅读行;do courseLine='$line | grep-iE^ csc[0-9]{4}'学分小时数='$line | grep-iE^[0-4]''courseNumber=${courseLine#/s*}courseName=${courseLine%/s*}echo$courseNumber,$courseName,$courseHours done