我在循环存储在变量中的sed返回的行时遇到了问题。
目前看起来有点像这样
lines=$(sed -rne '/'"$timestamplastupload"'/,/'"$timestampnow"'/ p' /var/log/test.log)
for line in "$lines"; do
echo "This line is: $line"
done
但是到目前为止这还没有工作,循环一次运行一次,而$ line变量的内容看起来是整个$ lines变量,因此只打印一次,而不是逐行循环前缀& #34;这一行是:"
我错过了能够逐个循环遍历sed输出的每一行的内容。 (最终将匹配的行逐行上传到API)所以我需要分别对每一行进行处理,以便我可以根据需要处理它们。
根据要求,来自sed的一些输出已经为了安全起见了
Wed Feb 28 22:33:11 2018 us=452112 xxx/1.2.3.4:55487 [xxx] Inactivity timeout (--ping-restart), restarting
Wed Feb 28 22:33:11 2018 us=452112 xxx/1.2.3.4:55487 [xxx] Inactivity timeout (--ping-restart), restarting
Wed Feb 28 22:33:11 2018 us=452112 xxx/1.2.3.4:55487 [xxx] Inactivity timeout (--ping-restart), restarting
Wed Feb 28 22:33:11 2018 us=452180 xxx/1.2.3.4:55487 SIGUSR1[soft,ping-restart] received, client-instance restarting
Wed Feb 28 22:33:11 2018 us=452180 xxx/1.2.3.4:55487 SIGUSR1[soft,ping-restart] received, client-instance restarting
Wed Feb 28 22:33:11 2018 us=452180 xxx/1.2.3.4:55487 SIGUSR1[soft,ping-restart] received, client-instance restarting
Wed Feb 28 22:33:11 2018 us=452180 xxx/1.2.3.4:55487 SIGUSR1[soft,ping-restart] received, client-instance restarting
答案 0 :(得分:1)
请勿使用for
阅读。改为使用流程替换:
while read -r line; do
# your logic
done < <(sed -rne '/'"$timestamplastupload"'/,/'"$timestampnow"'/ p' /var/log/test.log)
请参阅:
答案 1 :(得分:0)
你的sed的输出会很有用(因为处理的是endlines),但除此之外,this question似乎提供了一个可以解释的答案:
IFS=' ' read -r -a array <<< "$lines"
for element in "${array[@]}"
do
echo "$element"
done