2014-09-29 102 views
0

我是bash腳本的初學者,我想問一些問題。sed沒有使用條件if語句bash腳本

我認爲隨着時間的字符串比較的時候在我的計算機中的條件語句,就像這樣:

#!/bin/bash 

skrg=$(date +%H%M%S) 

while IFS=':' read LINE do 

     tanggal=${LINE//[:]/} 
     if test $skrg -ge $tanggal 
     then 
       echo string 
       sed -e 's/$/LINE/' -i soal 
     fi 
done < soal 

echo命令的if語句下工作,但SED不是,它仍然添加LINE字符串,即使if語句錯誤。

我對這個問題很困惑,感謝您的幫助:d


例如輸入:

1點12分14秒

7時08分45秒

22:10:45

輸出: 它應該是這樣=

1時12分14秒LINE

7點08分45秒LINE

22點10分45秒

而是輸出=

01:12:14 LINE

7時08分45秒LINE

22時十分45秒LINE

+0

例輸入和輸出? – 2014-09-29 05:54:03

+0

已經添加了示例先生,謝謝 – 2014-09-29 06:11:36

回答

2

問題是,

sed -e 's/$/LINE/' -i soal 

因爲,sed將在所有的行應用s/$/LINE/取代。這就是爲什麼,你沒有得到預期的產出。

要調試:

while循環的末尾添加cat soal。與此類似,

#!/bin/bash 

skrg=$(date +%H%M%S) 

while IFS=':' read LINE do 

     tanggal=${LINE//[:]/} 
     if test $skrg -ge $tanggal 
     then 
       sed -e 's/$/LINE/' -i soal 
     fi 
     cat soal 
done < soal 

解決方案:

您需要使用的線路數,在做替換。

#!/bin/bash 

skrg=$(date +%H%M%S) 
line=1 

while IFS=':' read LINE 
do 
     tanggal=${LINE//[:]/} 
     if test $skrg -ge $tanggal 
     then 
       sed -i "$line{s/$/LINE/}" soal 
     fi 
     line=$((line+1)) 
done < soal 
1

你的輸出被搞砸了,因爲你是,你走覆蓋輸入文件!

sed -e 's/$/LINE/' -i soal 

這實際上覆蓋了soal

1

爲了保持主要代碼

#!/bin/bash 

skrg=$(date +%H%M%S) 

while IFS=':' read LINE do 

     tanggal=${LINE//[:]/} 
     if test $skrg -ge $tanggal 
     then 
       echo string 
       echo "${LINE} LINE" >> /tmp/soal.tmp 
     else 
       echo "${LINE}" >> /tmp/soal.tmp 

     fi 
done < soal 

mv /tmp/soal.tmp soal