我正在尝试读取一个文件,条件是如果我的当前行具有以下正则表达式,则同时打印当前行和上一行。但是我根本没有得到任何输出。
$ cat xc
#!/bin/bash
prev=
regex="switchport trunk allowed vlan*"
while read line
do
if [ -n "${prev}" ] && [[ $line =~ $regex ]];then
line1="${prev}"
line2="${line}"
echo "${line1}"
echo "${line2}"
fi
done < as159.tmp
$ ./xc
在没有 $prev 部分的情况下测试条件时(我将其注释掉,如下所示),我可以看到我确实得到了输出:
$ cat xc
#!/bin/bash
prev=
regex="switchport trunk allowed vlan*"
while read line
do
#if [ -n "${prev}" ] &&
if [[ $line =~ $regex ]];then
line1="${prev}"
line2="${line}"
echo "${line1}"
echo "${line2}"
fi
done < as159.tmp
$ ./xc
switchport trunk allowed vlan 40,10,30
switchport trunk allowed vlan 10,20,30,50,100
所以这一定是一个条件问题,我不确定它是什么。
主要问题是关于你的变量
prev
,因为这个变量从来没有值。所以解决方案是给它赋值,如下所示:顺便说一句,使用
line1="${prev}"
andline2="${line}"
是多余的(除非你想在不影响原始变量的情况下操纵这些值)。所以,你可以简单地使用: