2010-03-22 10 views
3

J'essaie de lire un fichier d'expressions régulières, de les boucler et de les filtrer sur un autre fichier. Je suis si proche, mais j'ai des problèmes avec ma substitution $ regex var je crois.Utilisez regex dans la commande awk dans le script bash

while read regex 
do 
    awk -vRS= '!/$regex/' ORS="\n\n" $tempOne > $tempTwo 
    mv $tempTwo $tempOne 
done < $filterFile 

$ tempOne et $ tempTwo sont des fichiers temporaires. $ filterFile est le fichier contenant les regexes.

+0

On dirait que vous voulez qu'il y ait une ligne blanche où il y avait un ligne correspondant à votre expression régulière? Est-ce la raison pour laquelle il y a le SRO? – rescdsk

Répondre

2

$regex n'est pas développé parce qu'il est cité entre guillemets. En bash, extensions ne sont effectuées que dans les chaînes doublequoted:

foo="bar" 
echo '$foo' # --> $foo 
echo "$foo" # --> bar 

Alors, juste casser votre chaîne comme ceci:

'!'"/$regex/" 

et il se comportera comme prévu. Le ! ne doit pas être évalué, car cela exécutera la dernière commande de votre historique.

0

Je pense que vous avez un problème

$ regex=asdf 
$ echo '!/$regex/' 
!/$regex/ 
$ echo "!/$regex/" 
bash: !/$regex/: event not found 
$ echo "\!/$regex/" 
\!/asdf/ 
$ echo '!'"/$regex/" 
!/asdf/ 
2

passer votre variable shell citant à awk en utilisant -v l'option

while read regex 
do 
    awk -vRS= -vregex="$regex" '$0!~regex' ORS="\n\n" $tempOne > $tempTwo 
    mv $tempTwo $tempOne 
done < $filterFile