3 votes

Utiliser le regex dans la commande awk en bash script.

J'essaie de lire un fichier de regex, de le parcourir en boucle et de le filtrer dans un autre fichier. J'y suis presque, mais j'ai des problèmes avec ma substitution de var $regex, je crois.

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 regex.

2voto

vezult Points 3812

$regex n'est pas développée car elle est entre guillemets. En bash, les expansions ne sont faites que dans les chaînes de caractères doublement citées :

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

Alors, séparez votre chaîne comme ça :

'!'"/$regex/"

et il se comportera comme vous le souhaitez. Le site ! ne doit pas être évaluée, car elle exécutera la dernière commande de votre historique.

2voto

ghostdog74 Points 86060

Passer votre variable shell à awk en utilisant -v option

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

0voto

rescdsk Points 4136

Je pense que vous avez un problème de citation

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X