Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash在while语句中嵌套if语句_Bash - Fatal编程技术网

bash在while语句中嵌套if语句

bash在while语句中嵌套if语句,bash,Bash,在评估sed Status:code之后,我的文件似乎一次又一次地写出linefix变量 你知道我在筑巢时做错了什么吗? 或者是在while之前设置的变量“previor”,然后在嵌套的if语句中使用?将其设置为字符串Null,因为我们最初没有前一行,然后每次它找到日期时,我都会写出前一行,希望当我在某行上找不到日期时,我可以将其附加到具有状态值的行中 代码: ''' ''' 输入: ''' ''您的sed命令似乎没有向其传递输入-这意味着它将获取来自

在评估sed Status:code之后,我的文件似乎一次又一次地写出linefix变量

你知道我在筑巢时做错了什么吗? 或者是在while之前设置的变量“previor”,然后在嵌套的if语句中使用?将其设置为字符串Null,因为我们最初没有前一行,然后每次它找到日期时,我都会写出前一行,希望当我在某行上找不到日期时,我可以将其附加到具有状态值的行中

代码: '''

'''

输入: '''


''

您的
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")