【问题标题】:Using bash to edit text file and display output使用 bash 编辑文本文件并显示输出
【发布时间】: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


【解决方案1】:
#/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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 2010-11-29
    相关资源
    最近更新 更多