循环查看sed

时间:2018-03-01 06:18:42

标签: bash sed

我在循环存储在变量中的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

2 个答案:

答案 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