Shell‑скрипты, Ansible, deployment‑сценарии и другие подходы к автоматизации задач администрирования.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
skipper
- рядовой
- Сообщения: 23
- Зарегистрирован: 2009-12-07 18:59:11
-
Контактная информация:
Непрочитанное сообщение
skipper » 2013-01-08 17:42:09
Вечер добрый.
Из строки типа "15 aaaaa.sh /data/a/b/c/i_ges.php >> /dev/null" нужно выдирать полные пути к файлам типа "\/.*\.php"
Как это сделать через sed или любую другую утилиту?
Сам мучаюсь над, который почему-то выводит только все после последнего слэша.
Код: Выделить всё
echo "15 aaaaa.sh /data/a/b/c/i_ges.php >> /dev/null" | sed 's|.*\(\/.*\.php\).*|\1|'
Начинаю сомневаться, что это можно сделать через sed ...
help plz
skipper
-
Хостинг HostFood.ru
-
Хостинг HostFood.ru
Тарифы на хостинг в России, от 12 рублей:
https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.:
https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах:
https://www.host-food.ru/domains/
-
Bayerische
- капитан
- Сообщения: 1820
- Зарегистрирован: 2010-12-25 20:41:50
- Откуда: Хлебная столица
Bayerische
-
skipper
- рядовой
- Сообщения: 23
- Зарегистрирован: 2009-12-07 18:59:11
-
Контактная информация:
Непрочитанное сообщение
skipper » 2013-01-08 18:00:41
м.б. это можно сделать чем-то другим, кроме sed'а?
skipper
-
kpp
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
-
Контактная информация:
Непрочитанное сообщение
kpp » 2013-01-08 22:07:28
Для данного случая:
Код: Выделить всё
echo "15 aaaaa.sh /data/a/b/c/i_ges.php >> /dev/null" | sed 's|\([^ ]* \)\{2\}\([^ ]*\).*|\2|'
echo "15 aaaaa.sh /data/a/b/c/i_ges.php >> /dev/null" | awk '{print $3}'
echo "15 aaaaa.sh /data/a/b/c/i_ges.php >> /dev/null" | cut -d" " -f3
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.
kpp
-
kpp
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
-
Контактная информация:
Непрочитанное сообщение
kpp » 2013-01-08 22:20:25
Предыдущие варианты основаны на предположении, что искомый полный путь всегда находится в 3-м столбце.
Вариант, если нельзя привязываться к номеру столбца:
Код: Выделить всё
echo "15 aaaaa.sh /data/a/b/c/i_ges.php >> /dev/null" | sed 's|.*\(\([^\/]*\/\)\{1,\}[^ ]*\) .*|\1|'
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.
kpp
-
skipper
- рядовой
- Сообщения: 23
- Зарегистрирован: 2009-12-07 18:59:11
-
Контактная информация:
Непрочитанное сообщение
skipper » 2013-01-09 9:50:36
kpp писал(а):Для данного случая:
Код: Выделить всё
echo "15 aaaaa.sh /data/a/b/c/i_ges.php >> /dev/null" | sed 's|\([^ ]* \)\{2\}\([^ ]*\).*|\2|'
echo "15 aaaaa.sh /data/a/b/c/i_ges.php >> /dev/null" | awk '{print $3}'
echo "15 aaaaa.sh /data/a/b/c/i_ges.php >> /dev/null" | cut -d" " -f3
не вариант, к номеру столбца никак не привяжешся
kpp писал(а):Предыдущие варианты основаны на предположении, что искомый полный путь всегда находится в 3-м столбце.
Вариант, если нельзя привязываться к номеру столбца:
Код: Выделить всё
echo "15 aaaaa.sh /data/a/b/c/i_ges.php >> /dev/null" | sed 's|.*\(\([^\/]*\/\)\{1,\}[^ ]*\) .*|\1|'
это рагулярка вырезает только "/i_ges.php", а не "/data/a/b/c/i_ges.php", т.е. .* съедает все до последнего слэша, а не до первого (так же как и в моем варианте, первый пост).
skipper
-
kpp
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
-
Контактная информация:
Непрочитанное сообщение
kpp » 2013-01-09 11:13:06
Найдите одно отличие
Код: Выделить всё
echo "15 aaaaa.sh /data/a/b/c/i_ges.php >> /dev/null" | sed 's|.* \(\([^\/]*\/\)\{1,\}[^ ]*\) .*|\1|'
Условия такие: с двух сторон должны быть пробелы, в пути не должно быть пробелов.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.
kpp
-
kpp
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
-
Контактная информация:
Непрочитанное сообщение
kpp » 2013-01-09 11:28:27
Вообще говоря, для избавления от проблем в дальнейшем, пути принято оборачивать в кавычки, в этом случае:
Код: Выделить всё
echo '15 aaaaa.sh "/data/a/b/c/i_ges.php" >> /dev/null' | sed 's|.*"\(\([^\/]*\/\)\{1,\}[^"]*\)".*|\1|'
Если путь обернут в двойные кавычки, в пути допустимы и пробелы и кирилица.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.
kpp
-
skipper
- рядовой
- Сообщения: 23
- Зарегистрирован: 2009-12-07 18:59:11
-
Контактная информация:
Непрочитанное сообщение
skipper » 2013-01-09 11:57:44
kpp писал(а):Вообще говоря, для избавления от проблем в дальнейшем, пути принято оборачивать в кавычки, в этом случае:
Код: Выделить всё
echo '15 aaaaa.sh "/data/a/b/c/i_ges.php" >> /dev/null' | sed 's|.*"\(\([^\/]*\/\)\{1,\}[^"]*\)".*|\1|'
Если путь обернут в двойные кавычки, в пути допустимы и пробелы и кирилица.
нужно из крона выдрать пути к php файлам, там кавычки будут лишними
skipper
-
kpp
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
-
Контактная информация:
Непрочитанное сообщение
kpp » 2013-01-09 12:29:44
Так бы сразу:
Код: Выделить всё
sed -n '/^[ <-->]*#/!s|.*[ <--->]\(\([^\/]*\/\)\{1,\}[^\.]*\.php\).*|\1|p' /etc/crontab
<--> - табуляция
Закомментаренные строки пропускаются.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.
kpp
-
skipper
- рядовой
- Сообщения: 23
- Зарегистрирован: 2009-12-07 18:59:11
-
Контактная информация:
Непрочитанное сообщение
skipper » 2013-01-09 15:07:33
kpp писал(а):Так бы сразу:
Код: Выделить всё
sed -n '/^[ <-->]*#/!s|.*[ <--->]\(\([^\/]*\/\)\{1,\}[^\.]*\.php\).*|\1|p' /etc/crontab
<--> - табуляция
Закомментаренные строки пропускаются.
большое спасибо, это то, что нужно
Надо бы перечитать мануал по sed'у

skipper