J’ai des chemins comme ça:
/www/site1.dev/public_html/test.htm /www/site2.dev/html/test.htm /www/site3.dev/public/test.htm
Je voudrais les passer à un script bash et obtenir un résultat dans ce format:
http://site1.dev/test.htm http://site2.dev/test.htm http://site3.dev/test.htm
Je ne suis pas sûr de la meilleure façon de gérer la partie regex de ceci:
#! / bin / sh RET = ''; fonction sortingm () {echo $ 1; } pour ARG dans "$ @" faire // fait correspondre et ajoute une valeur RET existante RET = 'http: //' (expression régulière ou find / replace here) RET terminé echo ">> $ (sortingm $ RET) <<"
Solution
Mon code basé sur la réponse de Wes Hardaker
DOMAIN = `echo $ ARG | sed's #. * www / ## '` DOMAIN = `echo $ DOMAIN | sed -E's # / (public | html). * ## '` POST = `echo $ ARG | sed -E's #. * html ## '` echo 'http: //' $ DOMAIN $ POST
Le moyen le plus simple est probablement d’utiliser sed. C’EST À DIRE:
RET="http://"`echo $ARG | sed 's#/www##;s#/(public_|)html/#/#;'
en supposant que vos chemins sont dans un fichier
$ awk 'BEGIN{OFS=FS="/"}{print "http:/"$1,$3,$NF}' file http://site1.dev/test.htm http://site2.dev/test.htm http://site3.dev/test.htm
Rubis (1.9+)
$ ruby -F"/" -ane 'print "http:/"+[$F[0],$F[2],$F[-1]].join("/")' file
command to generate list of pathnames | while read path; do IFS=/ set -- $path echo "http://$3/$5" done
Une autre approche, si vous commencez à www/..
pushd www find * -type f | while read line; do echo http://${line%%/*}/${line##*/}; done popd