Извлечь строку функции перед именем функции с помощью регулярного выражения

Это довольно старый, но принятый ответ слишком строг. -Несколько файлов не обязательно являются одним аргументом для rsync. Изman rsync:

ADVANCED USAGE
       The  syntax  for  requesting  multiple  files  from a remote host is done by specifying additional remote-host args in the same style as the first, or with the hostname omitted.  For
       instance, all these work:

              rsync -av host:file1 :file2 host:file{3,4} /dest/
              rsync -av host::modname/file{1,2} host::modname/file3 /dest/
              rsync -av host::modname/file1 ::modname/file{3,4}

поэтому команда OP будет

rsync -Pav -e 'ssh -i sshkey' user@remotemachine:/home/user/file1.zip :/home/user/file2.zip :/home/user/file3.zip .

Это невозможно для более старых версий rsync, но я думаю, что все основные дистрибутивы поддерживают это уже несколько лет.

0
18.11.2021, 08:09
1 ответ

Предполагая, что вы ищете строку до .foo(), вы можете попробовать:

sed 's/^.*\W\(\w*\)\.foo().*$/\1/g'
Пояснение:
  • Обозначение \wявляется синонимом[_[:alnum:]]
  • Обозначение \Wявляется синонимом[^_[:alnum:]]

Итак, мы ищем часть перед .foo(), состоящую только из символов alphanumericи _и предшествующую символу non-alphanumeric. Заменяем всю строку только этой частью.

Внимание

Если some_function_name.foo()встречается дважды в одной и той же строке, будет обнаружен только первый экземпляр.

Если вы хотите убедиться, что все этих паттернов пойманы, даже если они встречаются дважды в одной строке, вы можете использовать:

grep -Po '\w*(?=\.foo\(\))'
Пояснение:

из man grep:

-P, --perl-regexp

Interpret the pattern as a Perl-compatible regular expression (PCRE). This is experimental and grep -P may warn of unimplemented features.

-o, --only-matching

Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.

Часть (?=\.foo\(\))называется Lookahead, что позволяет удалить часть совпадающего текста из шаблона. Так что в этом случае это будет из .foo()из шаблона.

1
18.11.2021, 09:37

Теги

Похожие вопросы