2013-03-28 108 views
-1

我有一個文本文件,課程,看起來像這樣:使用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

回答

0
#/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