Je suis en train de coder un simple script bash pour passer un port IP à une expression rationnelle à une commande awk. Je cherche le port que dans la destination localePasser une regexp dynamique via un script bash shell
Voici le code:
#!/bin/bash
s=$1
port="/[^0-9]$s$/"
netstat -numeric | awk -v pat="$port" '$6 == "ESTABLISHED" && $4 ~ pat {print}'
Voici par exemple des données.
tcp 0 0 1.9.1.1:23 1.9.2.1:54156 ESTABLISHED
tcp 0 0 1.9.1.1:23 1.9.2.4:51376 ESTABLISHED
tcp 0 0 1.9.1.1:23 1.9.2.1:53299 ESTABLISHED
tcp 0 0 1.9.1.1:23 1.9.2.1:64695 ESTABLISHED
tcp 0 0 1.9.1.1:53086 1.9.1.8:23 ESTABLISHED
tcp 0 0 1.9.1.1:23 1.9.2.1:53296 ESTABLISHED
Lorsque j'exécute le script, il ne renvoie rien.
Quand je lance manuellement, il renvoie les éléments suivants:
netstat -numeric | awk '$6 == "ESTABLISHED" && $4 ~ /[^0-9]23$/ {print}'
tcp 0 0 1.9.1.1:23 1.9.2.1:54156 ESTABLISHED
tcp 0 0 1.9.1.1:23 1.9.2.4:51376 ESTABLISHED
tcp 0 0 1.9.1.1:23 1.9.2.1:53299 ESTABLISHED
tcp 0 0 1.9.1.1:23 1.9.2.1:64695 ESTABLISHED
tcp 0 0 1.9.1.1:23 1.9.2.1:53296 ESTABLISHED
Toute suggestion serait grandement apprécié.
donc les /.../ sont implicites. merci pour l'aide – Drewber49er
Non, ils ne sont pas impliqués, lisez ce que j'ai dit à nouveau. '/.../' sont des délimiteurs ** pour les expressions rationnelles constantes **. Vous n'utilisez pas une expression régulière que vous utilisez une expression rationnelle dynamique et vous enregistrez l'expression rationnelle comme une chaîne dans une variable et dans une chaîne un '/' est juste un caractère littéral '/'. Dans '/ foo /' les '/' ne font pas partie de l'expression rationnelle, ce sont les délimiteurs autour de l'expression rationnelle qui le définissent comme une constante d'expression rationnelle. Vous pourriez utiliser des délimiteurs '" 'à la place (' $ 0 ~ "foo" ') mais cela ferait de l'expression rationnelle une expression rationnelle. –