繁体   English   中英

sed无法与条件if语句bash脚本一起使用

[英]sed didn't work with conditional if statement bash script

我是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不在,即使if语句错误,它仍然添加LINE字符串。

我对此问题非常困惑,谢谢您的帮助:D


输入示例:

1点12分14秒

7时08分45秒

22时10分45秒

输出:应该像这样=

01:12:14线

07:08:45线

22时10分45秒

但是输出是=

01:12:14线

07:08:45线

22:10:45线

问题是

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

因为, sed将在所有行中应用s/$/LINE/替换。 这就是为什么,您没有获得预期的输出。

要调试:

while循环结束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

您的输出被弄乱了,因为您将继续覆盖输入文件!

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

这实际上覆盖了soal

主要保留您的代码

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM