Nano Hash - криптовалюты, майнинг, программирование

Найти / заменить каталог и скрипт Bash

У меня есть такие пути:

/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

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

#!/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
29.03.2011

Ответы:


1

Самый простой способ, вероятно, использовать «sed». IE:

RET="http://"`echo $ARG | sed 's#/www##;s#/(public_|)html/#/#;'
29.03.2011
  • Не могли бы вы рассказать, как работает регулярное выражение? Что такое www##;s#? Кроме того, что, если путь содержит дополнительные неизвестные символы перед /www/? 29.03.2011
  • sed позволяет использовать регулярные выражения, которые не основаны на использовании символов /, поэтому вы можете использовать символы # для связывания выражений, которые могут вместо этого содержать много символов /s. Таким образом, первое регулярное выражение s#/www## заменяет /www ничем. Второй, s#/(public_|)html/#/# заменяет либо /public_html/, либо /html/ на /. 29.03.2011
  • Я не имел дело с дополнительными элементами до /www/, так как их не было в ваших примерах. Но вы можете добавить больше к выражению фильтра: s#/foo/bar/path/to/www## тоже будет работать. 29.03.2011
  • Хотя все решения на этой странице хороши, я думаю, что использование sed сработало для меня лучше всего. Я добавил свой синтаксис в конец вопроса. 29.03.2011

  • 2

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

    $ 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
    

    Рубин(1.9+)

    $ ruby -F"/" -ane 'print "http:/"+[$F[0],$F[2],$F[-1]].join("/")' file
    
    29.03.2011

    3

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

    pushd www
    find * -type f | while read line; do echo http://${line%%/*}/${line##*/}; done
    popd
    
    29.03.2011
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..