Я обнаружил, что использование скрипта Python является самым простым решением (проще, чем плагин обратного вызова, по крайней мере, в моей доступной версии 1.7):
#!/usr/bin/env python
from __future__ import print_function
import ansible.inventory
import ansible.runner
from subprocess import Popen, PIPE
import sys
TO = "root"
def message(subject, body):
p = Popen(["mail", "-s", subject, TO], stdin=PIPE)
p.communicate(input=body)
res = p.wait()
if res != 0:
print("Failed to send message", file=sys.stderr)
def main():
im = ansible.inventory.Inventory()
runner = ansible.runner.Runner(
module_name='command',
module_args='sh -c "echo OK"',
sudo=True,
)
run = runner.run()
nosudo = set(run["dark"].keys())
runner = ansible.runner.Runner(
module_name='command',
module_args='sh -c "echo OK"',
sudo=False,
inventory=ansible.inventory.Inventory(list(nosudo)),
)
run = runner.run()
nonet = set(run["dark"].keys())
nosudo = nosudo - nonet
for host in nosudo:
message("Host check: %s" % host,
"Cannot execute 'sudo -u root ...' as user 'deploy'.")
for host in nonet:
message("Host check: %s" % host,
"Cannot login into the machine.")
if __name__ == '__main__':
main()
Попробуйте использовать следующее регулярное выражение:https://www.instagram.com/p/[^/]\+/
#!/bin/bash
data="××××××https://www.instagram.com/p/BRhNDg5jne7/××××××××"
echo "$data" | grep -o 'https://www.instagram.com/p/[^/]\+/'
Волшебная часть — [^/]\+/
, она захватывает все до следующей косой черты включительно.
Пример вывода приведенного выше скрипта.
zb@server ~ $./tmp.sh
https://www.instagram.com/p/BRhNDg5jne7/
РЕДАКТИРОВАТЬ :, поскольку вопрос претерпел некоторые изменения с тех пор, как я опубликовал свой ответ, изменилось и мое понимание этого вопроса.
Если все ваши строки имеют шаблон xxxx
, то все, что вам нужно сделать, это заменить регулярное выражение на sed
. т.е.:
sed 's/xxxx*//g'
Если вам сначала нужно grep
строки, затем передайте sed
после grep
. т.е.:
grep "https://www.instagram.com/p/" | sed 's/xxxx*//g'
В зависимости от того, какой у вас реальный паттерн, этот подход может быть полезен, а может и нет.
Использование grep:
echo "××××××https://www.instagram.com/p/BRhNDg5jne7/××××××××" | grep -Po "(?s)(http(.*?)(\/p\/.*\/|\/\Z))"
выход:
https://www.instagram.com/p/BRhNDg5jne7/
нет необходимости в регулярном выражении perl Вы можете попробовать:
grep -o "https://www.instagram.com/.*/"