我正在尝试读取一个文件,条件是如果我的当前行具有以下正则表达式,则打印当前行和上一行。但是我根本没有得到任何输出。
$ 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
所以这肯定是一个条件问题,我不确定它是什么。
答案1
主要问题是关于你的变量,prev
因为这个变量从来没有值。所以解决方案是给它分配一个像这样的值:
...
while read line
do
#if [ -n "${prev}" ] &&
if [[ $line =~ $regex ]];then
line1="${prev}"
line2="${line}"
echo "${line1}"
echo "${line2}"
fi
prev="$line"
done < as159.tmp
...
顺便说一句,使用line1="${prev}"
andline2="${line}"
是多余的(除非您想在不影响原始变量的情况下操作这些值)。因此,您可以简单地使用:
...
while read line
do
#if [ -n "${prev}" ] &&
if [[ $line =~ $regex ]];then
echo "${prev}"
echo "${line}"
fi
prev="$line"
done < as159.tmp
...