bash在while语句中嵌套if语句
在评估sed Status:code之后,我的文件似乎一次又一次地写出linefix变量 你知道我在筑巢时做错了什么吗? 或者是在while之前设置的变量“previor”,然后在嵌套的if语句中使用?将其设置为字符串Null,因为我们最初没有前一行,然后每次它找到日期时,我都会写出前一行,希望当我在某行上找不到日期时,我可以将其附加到具有状态值的行中 代码: ''' ''' 输入: '''bash在while语句中嵌套if语句,bash,Bash,在评估sed Status:code之后,我的文件似乎一次又一次地写出linefix变量 你知道我在筑巢时做错了什么吗? 或者是在while之前设置的变量“previor”,然后在嵌套的if语句中使用?将其设置为字符串Null,因为我们最初没有前一行,然后每次它找到日期时,我都会写出前一行,希望当我在某行上找不到日期时,我可以将其附加到具有状态值的行中 代码: ''' ''' 输入: ''' ''您的sed命令似乎没有向其传递输入-这意味着它将获取来自
''您的
sed
命令似乎没有向其传递输入-这意味着它将获取来自
的所有剩余输出,使其一次消耗所有剩余的行
看来你想这么做:
linefix=$(echo "$line" | sed -n -e 's/^.*\(Status: \)/\1/p')
或者,如果您想更时尚,节省回声和管道,您可以使用以下字符串:
linefix=$(sed -n -e 's/^.*\(Status: \)/\1/p' <<< "$line")
linefix=$(sed-n-e的/^.*\(状态:\)/\1/p“我看不到sed
的输入。你有一个示例文件来演示这个问题吗?一个小示例就可以了。如果你也能给出一个预期输出的示例,那就非常好了。输出文件与输出文件大致相同。我会把任何有日期的行都写回新文件。然后,我查看“Status”所在的行上是否没有日期,例如包含Driver:或Channel:的行,然后我获取上一行的日期(希望获取)然后写出来,使状态行上有一个时间戳。因此原始文件的状态行类似于频道和驱动程序行,没有日期/时间戳。我试图得到一个文件,其中状态行始终有日期代码块,由三个反勾分隔,`
,而不是单引号,'
–您直到获取代码格式,因为您还缩进了代码块。您不需要同时执行这两项操作。您还可以使用bash的内置替换来执行此任务:linefix=“${line/#*Status:/Status:}”
jcl/jclnt.log-[05/05/20 02:20:15.669]:jclnt PT:Filtering out notification-only attributes.
jcl/jclnt.log-[05/05/20 02:20:15.669]:jclnt PT:Pumping XDS to ldap.
jcl/jclnt.log-[05/05/20 02:20:15.669]:jclnt PT:Performing operation status for .
jcl/jclnt.log-[05/05/20 02:20:15.669]:jclnt PT:
jcl/jclnt.log-DirXML Log Event -------------------
jcl/jclnt.log- Driver: \StarWars\system\Driver Set\AD-wookie
jcl/jclnt.log- Channel: Publisher
jcl/jclnt.log- Status: Error
linefix=$(echo "$line" | sed -n -e 's/^.*\(Status: \)/\1/p')
linefix=$(sed -n -e 's/^.*\(Status: \)/\1/p' <<< "$line")