[英]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.