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