Estou tentando ler um arquivo, com a condição de que, se minha linha atual tiver um regex abaixo, imprima a linha atual e a linha anterior. No entanto, não recebo nenhuma saída.
$ 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
Ao testar a condição sem a seção $prev (comentei, conforme mostrado abaixo), posso ver que recebo a saída:
$ 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
Então deve ser um problema de condição, que não tenho certeza do que é.
O principal problema é sobre sua variável,
prev
já que esta nunca tem um valor. Portanto, a solução é atribuir um valor como este:Aliás, usar
line1="${prev}"
eline2="${line}"
é redundante (a menos que você queira manipular os valores sem afetar as variáveis originais). Então, você pode simplesmente usar: