Найти / заменить каталог и Bash Script - PullRequest
1 голос
/ 29 марта 2011

У меня есть несколько таких путей:

/www/site1.dev/public_html/test.htm
/www/site2.dev/html/test.htm
/www/site3.dev/public/test.htm

Я бы хотел передать их скрипту bash и получить результат обратно в следующем формате:

http://site1.dev/test.htm
http://site2.dev/test.htm
http://site3.dev/test.htm

I 'Я не уверен, что лучший способ справиться с частью регулярного выражения:

#!/bin/sh

RET='';

function trim() { echo $1; }


for ARG in "$@"
    do
        //do match and add existing RET value
        RET= 'http://'(regular expression or find/replace here) RET 
done


echo ">>$(trim $RET)<<"

Решение

Мой код основан на ответе Уэса Хардакера

        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

Ответы [ 4 ]

0 голосов
/ 29 марта 2011

Другой подход, если вы начинаете с www/..

pushd www
find * -type f | while read line; do echo http://${line%%/*}/${line##*/}; done
popd
0 голосов
/ 29 марта 2011

при условии, что ваши пути находятся в файле

$ 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

Ruby (1.9 +)

$ ruby -F"/" -ane 'print "http:/"+[$F[0],$F[2],$F[-1]].join("/")' file
0 голосов
/ 29 марта 2011
command to generate list of pathnames | while read path; do 
  IFS=/
  set -- $path
  echo "http://$3/$5"
done
0 голосов
/ 29 марта 2011

Самый простой способ - использовать sed. IE:

RET="http://"`echo $ARG | sed 's#/www##;s#/(public_|)html/#/#;'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...